{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "653089c9",
   "metadata": {},
   "source": [
    "# Chapter 2: Deep Learning with PyTorch\n",
    "\n",
    " This chapter covers\n",
    " \n",
    "* PyTorch tensors and basic operations\r",
    "* Preparing data for deep learning in PyTorch\n",
    "* Building and training deep neural networks with PyTorch \n",
    "* Conducting binary and multi-category classifications with deep learning \r",
    "* Creating a validation set to decide training stop points\r\n",
    "\n",
    "\n",
    "\n",
    "In this book, we’ll use deep neural networks to generate a wide range of content, including text, images, shapes, music, and more. I assume you possess a prior familiarity with the inner workings of machine learning (ML), and specifically, a foundational understanding of artificial neural networks. Throughout this chapter, I’ll refresh your memory on a few key concepts such as loss functions, activation functions, optimizers, and the learning rate, which constitute indispensable elements in the development and training of deep neural networks. Should there be any gaps in your knowledge pertaining to these concepts, it is strongly encouraged that you rectify them before progressing further with projects in this book. \n",
    "Generative AI models are frequently confronted with the task of either binary or multi-category classification. For instance, in Generative Adversarial Networks (GANs), the discriminator undertakes the essential role of a binary classifier, its purpose being to distinguish between the fake samples created by the generator from real samples from the training set. Similarly, in the context of text generation models, whether in recurrent neural networks or Transformers, the overarching objective is to predict the subsequent character or word from an extensive array of possibilities (essentially a multi-category classification task).\n",
    "\n",
    "In this chapter, you’ll learn how to use PyTorch to create deep neural networks to perform binary and multi-category classifications so that you become well-versed in deep learning and classification tasks. \n",
    "Specifically, you’ll engage in an end-to-end deep learning project in PyTorch, on a quest to classify grayscale images of clothing items into different categories such as coats, bags, sneakers, shirts, and so on. The intention is to prepare you for the creation of deep neural networks, capable of performing both binary and multi-category classification tasks in PyTorch. This, in turn, will get you ready for the upcoming chapters, where you use deep neural networks in PyTorch to create various generative models.\n",
    "\n",
    "To train generative AI models, we harness a diverse range of data formats such as raw text, audio files, image pixels, and arrays of numbers. Deep neural networks created in PyTorch cannot take these forms of data directly as inputs. Instead, we must first convert them into a format that the neural networks understand and accept. Specifically, you’ll convert various forms of raw data into PyTorch tensors (fundamental data structures used to represent and manipulate data) before feeding them to generative AI models. Therefore, in this chapter, you’ll also learn the basics of data types, how to create various forms of PyTorch tensors, and how to use them in deep learning. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "082a60ea",
   "metadata": {},
   "source": [
    "# 1. Data Types in PyTorch "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbba9cd8",
   "metadata": {},
   "source": [
    "## 1.1. Create PyTorch Tensors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4e263bca",
   "metadata": {},
   "outputs": [],
   "source": [
    "heights = [189, 170, 189, 163, 183, 171, 185,\n",
    "           168, 173, 183, 173, 173, 175, 178,\n",
    "           183, 193, 178, 173, 174, 183, 183,\n",
    "           180, 168, 180, 170, 178, 182, 180,\n",
    "           183, 178, 182, 188, 175, 179, 183,\n",
    "           193, 182, 183, 177, 185, 188, 188,\n",
    "           182, 185, 191, 183]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "698ba2df",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "heights_tensor = torch.tensor(heights,    #A\n",
    "           dtype=torch.float64)    #B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6b6fba53",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([1, 2, 3], dtype=torch.int32)\n",
      "tensor([1, 2, 3], dtype=torch.int32)\n"
     ]
    }
   ],
   "source": [
    "t1=torch.IntTensor([1, 2, 3])    #A \n",
    "t2=torch.tensor([1, 2, 3],\n",
    "             dtype=torch.int)    #B\n",
    "print(t1)\n",
    "print(t2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e41cd400",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[0., 0., 0.],\n",
      "        [0., 0., 0.]])\n"
     ]
    }
   ],
   "source": [
    "tensor1 = torch.zeros(2, 3)\n",
    "print(tensor1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4cbe53e3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[1., 1., 1., 1., 1.],\n",
      "         [1., 1., 1., 1., 1.],\n",
      "         [1., 1., 1., 1., 1.],\n",
      "         [1., 1., 1., 1., 1.]]])\n"
     ]
    }
   ],
   "source": [
    "tensor2 = torch.ones(1,4,5)\n",
    "print(tensor2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8ae4c115",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=torch.int32)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "nparr=np.array(range(10))\n",
    "pt_tensor=torch.tensor(nparr, dtype=torch.int)\n",
    "print(pt_tensor)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84c2fb60",
   "metadata": {},
   "source": [
    "## 1.2. Index and Slice PyTorch Tensors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7ef10e56",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(189., dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "height = heights_tensor[2]\n",
    "print(height)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ec946da8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(191., dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "height = heights_tensor[-2]\n",
    "print(height)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "94638599",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([188., 182., 185., 191., 183.], dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "five_heights = heights_tensor[-5:]\n",
    "print(five_heights)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb71a934",
   "metadata": {},
   "source": [
    "## 1.3. PyTorch Tensor Shapes\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "655240c6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([46])\n"
     ]
    }
   ],
   "source": [
    "print(heights_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3b09ecf9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([6.2008, 5.5774, 6.2008, 5.3478, 6.0039, 5.6102, 6.0696, 5.5118, 5.6759,\n",
      "        6.0039, 5.6759, 5.6759, 5.7415, 5.8399, 6.0039, 6.3320, 5.8399, 5.6759,\n",
      "        5.7087, 6.0039, 6.0039, 5.9055, 5.5118, 5.9055, 5.5774, 5.8399, 5.9711,\n",
      "        5.9055, 6.0039, 5.8399, 5.9711, 6.1680, 5.7415, 5.8727, 6.0039, 6.3320,\n",
      "        5.9711, 6.0039, 5.8071, 6.0696, 6.1680, 6.1680, 5.9711, 6.0696, 6.2664,\n",
      "        6.0039], dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "heights_in_feet = heights_tensor / 30.48\n",
    "print(heights_in_feet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "79d9afe4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([92])\n"
     ]
    }
   ],
   "source": [
    "heights_2_measures = torch.cat(\n",
    "    [heights_tensor,heights_in_feet], dim=0)\n",
    "print(heights_2_measures.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b6309b53",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[189.0000, 170.0000, 189.0000, 163.0000, 183.0000, 171.0000, 185.0000,\n",
      "         168.0000, 173.0000, 183.0000, 173.0000, 173.0000, 175.0000, 178.0000,\n",
      "         183.0000, 193.0000, 178.0000, 173.0000, 174.0000, 183.0000, 183.0000,\n",
      "         180.0000, 168.0000, 180.0000, 170.0000, 178.0000, 182.0000, 180.0000,\n",
      "         183.0000, 178.0000, 182.0000, 188.0000, 175.0000, 179.0000, 183.0000,\n",
      "         193.0000, 182.0000, 183.0000, 177.0000, 185.0000, 188.0000, 188.0000,\n",
      "         182.0000, 185.0000, 191.0000, 183.0000],\n",
      "        [  6.2008,   5.5774,   6.2008,   5.3478,   6.0039,   5.6102,   6.0696,\n",
      "           5.5118,   5.6759,   6.0039,   5.6759,   5.6759,   5.7415,   5.8399,\n",
      "           6.0039,   6.3320,   5.8399,   5.6759,   5.7087,   6.0039,   6.0039,\n",
      "           5.9055,   5.5118,   5.9055,   5.5774,   5.8399,   5.9711,   5.9055,\n",
      "           6.0039,   5.8399,   5.9711,   6.1680,   5.7415,   5.8727,   6.0039,\n",
      "           6.3320,   5.9711,   6.0039,   5.8071,   6.0696,   6.1680,   6.1680,\n",
      "           5.9711,   6.0696,   6.2664,   6.0039]], dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "heights_reshaped = heights_2_measures.reshape(2, 46)\n",
    "print(heights_reshaped)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "1d3caf3f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(6.2664, dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "print(heights_reshaped[1,-2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "3dabf988",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(6.2664, dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "print(heights_reshaped[1,-2])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cada6b34",
   "metadata": {},
   "source": [
    "## 1.4. Mathematical Operations on PyTorch Tensors\n",
    "We can conduct mathematical operations on PyTorch tensors by using different methods such as mean(), median(), sum(), max(), and so on. For example, to find the median height of the 46 presidents in centimeters, we can do this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "599a0d66",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(182., dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "print(torch.median(heights_reshaped[0,:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "c27cfac4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([180.0652,   5.9077], dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "print(torch.mean(heights_reshaped,dim=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a84dadb6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([193.0000,   6.3320], dtype=torch.float64)\n",
      "tensor([15, 15])\n"
     ]
    }
   ],
   "source": [
    "values, indices = torch.max(heights_reshaped, dim=1)\n",
    "print(values)\n",
    "print(indices)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bcbdf00",
   "metadata": {},
   "source": [
    "# 2. An End-to-End Deep Learning Project with PyTorch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8e0b2e3",
   "metadata": {},
   "source": [
    "## 2.1. Download and Visualize the Data\n",
    "You can download the Fashion MNIST data directly from Torchvision datasets. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "c4823d8c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torchvision\n",
    "import torchvision.transforms as T\n",
    "\n",
    "torch.manual_seed(42)\n",
    "transform=T.Compose([\n",
    "    T.ToTensor(),\n",
    "    T.Normalize([0.5],[0.5])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "91129836",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set=torchvision.datasets.FashionMNIST(    #A\n",
    "    root=\".\",    #B\n",
    "    train=True,    #C\n",
    "    download=True,    #D\n",
    "    transform=transform)    #E\n",
    "test_set=torchvision.datasets.FashionMNIST(root=\".\",\n",
    "    train=False,download=True,transform=transform)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "4e5da6b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(tensor([[[-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -0.9922, -1.0000,\n",
      "          -1.0000, -0.8980, -0.4275, -1.0000, -1.0000, -0.9922, -0.9686,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -0.9922, -0.9922, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -0.9765, -1.0000,\n",
      "          -0.7176,  0.0667, -0.0039, -0.5137, -0.5765, -1.0000, -1.0000,\n",
      "          -1.0000, -0.9922, -0.9765, -0.9686, -1.0000, -1.0000, -0.9765],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -0.9529, -1.0000,\n",
      "          -0.2000,  0.6000,  0.3804,  0.0510,  0.1294, -0.0353, -0.8196,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -0.9059, -0.9216, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "           0.2157,  0.8510,  0.6235,  0.3961, -0.1608,  0.2235,  0.2627,\n",
      "          -0.1451, -0.4980, -0.8196, -0.3961,  0.0196, -0.4353, -0.8824],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -0.9922, -1.0000, -0.4588,\n",
      "           0.6235,  0.7490,  0.7098,  0.6941,  0.6941,  0.2784, -0.0039,\n",
      "          -0.0510, -0.0431,  0.1451,  0.1059, -0.3098,  0.3490, -0.4824],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -0.9922, -0.9922, -0.9922, -1.0000,  0.5686,\n",
      "           0.8196,  0.8196,  0.8275,  0.7961,  0.7490,  0.7490,  0.6863,\n",
      "           0.6706,  0.2863, -0.0039, -0.0353,  0.5373,  0.7961, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,  0.4353,\n",
      "           0.7647,  0.6941,  0.7490,  0.7882,  0.8431,  0.7804,  0.7569,\n",
      "           0.7412,  0.7569,  0.7333,  0.7490,  0.9216,  0.3569, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,  0.5137,\n",
      "           0.7882,  0.7098,  0.6706,  0.5529,  0.4118,  0.6627,  0.6471,\n",
      "           0.6549,  0.6706,  0.7490,  0.7255,  0.9059,  0.5843, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -0.9922, -0.9765, -1.0000, -0.9059,  0.7176,\n",
      "           0.7255,  0.6627,  0.7098,  0.5059,  0.3255,  0.7804,  0.6314,\n",
      "           0.7098,  0.7569,  0.6627,  0.7725,  0.5451,  0.6392, -0.5922],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -0.9529, -1.0000, -0.2235,  0.9137,\n",
      "           0.7412,  0.7255,  0.7098,  0.5922,  0.5529,  0.7333,  0.6863,\n",
      "           0.6706,  0.7412,  0.7255,  0.9216, -0.0667,  0.3098, -0.5608],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -0.9686, -1.0000, -1.0000, -0.5686,  0.8510,\n",
      "           0.7882,  0.8039,  0.7882,  0.8824,  0.8196,  0.6706,  0.7098,\n",
      "           0.7490,  0.8353,  0.7020,  0.7020,  0.6392, -0.2784, -1.0000],\n",
      "         [-1.0000, -1.0000, -0.9922, -0.9686, -0.9529, -0.9451, -0.9843,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,  0.8588,  0.7725,\n",
      "           0.7020,  0.7490,  0.7412,  0.7176,  0.7412,  0.7333,  0.6941,\n",
      "           0.7490,  0.7961,  0.6863,  0.7098,  1.0000, -0.3961, -1.0000],\n",
      "         [-1.0000, -0.9765, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -0.5137,  0.1373,  0.6000,  0.7882,  0.6235,\n",
      "           0.6706,  0.7333,  0.7098,  0.6314,  0.6549,  0.7098,  0.7569,\n",
      "           0.7490,  0.7176,  0.6863,  0.7569,  0.9137,  0.2471, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -0.8588, -0.6549, -0.3569,\n",
      "          -0.1608,  0.4824,  0.7882,  0.7255,  0.7412,  0.7020,  0.7725,\n",
      "           0.5686,  0.6078,  0.6549,  0.8039,  0.7569,  0.8353,  0.3804,\n",
      "           0.4745,  0.9608,  0.9451,  0.8275,  0.8667,  0.6863, -1.0000],\n",
      "         [-1.0000, -0.5529,  0.4667,  0.6314,  0.7569,  0.7333,  0.7569,\n",
      "           0.6314,  0.6000,  0.6784,  0.6314,  0.6392,  0.5686,  0.2471,\n",
      "           0.9216,  0.5137,  0.6157,  0.7490,  1.0000,  1.0000,  0.7333,\n",
      "           0.8353,  0.7333,  0.6549,  0.7255,  0.8196,  0.9294, -1.0000],\n",
      "         [-0.9765,  0.5843,  0.7882,  0.7569,  0.7333,  0.6549,  0.6549,\n",
      "           0.6784,  0.6078,  0.6078,  0.6078,  0.7255,  0.8824, -0.3725,\n",
      "           0.1765,  1.0000,  0.7961,  0.7333,  0.4745,  0.2078,  0.4980,\n",
      "           0.6471,  0.6000,  0.6392,  0.7412,  0.7882,  0.7647, -1.0000],\n",
      "         [-0.2314,  0.8275,  0.5529,  0.6471,  0.7412,  0.7961,  0.7961,\n",
      "           0.8353,  0.9529,  0.7255,  0.5216,  0.6863,  0.7020,  0.8902,\n",
      "          -0.4902, -0.4275, -0.1686, -0.0824,  0.3176,  0.7176,  0.7333,\n",
      "           0.6863,  0.7020,  0.7490,  0.7490,  0.7569,  0.7961, -0.7725],\n",
      "         [-0.4118,  0.6000,  0.6627,  0.6000,  0.5137,  0.6078,  0.6549,\n",
      "           0.7647,  0.6941,  0.4510,  0.5451,  0.6157,  0.5529,  0.6706,\n",
      "           0.8824,  0.5294,  0.7804,  0.9216,  0.8745,  0.7490,  0.7098,\n",
      "           0.6627,  0.6392,  0.7412,  0.7255,  0.7333,  0.8039, -0.4745],\n",
      "         [-0.6235,  0.5922,  0.4353,  0.5216,  0.6706,  0.5451,  0.4510,\n",
      "           0.4902,  0.5216,  0.5059,  0.5843,  0.6784,  0.7176,  0.7333,\n",
      "           0.7255,  0.8510,  0.7647,  0.6941,  0.5608,  0.6157,  0.4588,\n",
      "           0.4196,  0.3882,  0.3490,  0.4196,  0.6078,  0.6157, -0.0980],\n",
      "         [-1.0000, -0.0431,  0.7176,  0.5137,  0.4039,  0.3412,  0.4353,\n",
      "           0.5373,  0.6000,  0.6471,  0.6706,  0.6235,  0.6549,  0.6471,\n",
      "           0.5686,  0.5373,  0.5216,  0.4980,  0.5294,  0.4980,  0.5529,\n",
      "           0.5059,  0.3804,  0.2235,  0.3098,  0.3882,  0.6471, -0.2784],\n",
      "         [-1.0000, -1.0000, -0.4196,  0.4824,  0.6627,  0.4980,  0.3725,\n",
      "           0.3490,  0.3725,  0.4196,  0.4510,  0.4745,  0.4824,  0.4745,\n",
      "           0.5137,  0.5529,  0.6000,  0.6392,  0.6471,  0.6471,  0.6549,\n",
      "           0.4745,  0.4745,  0.5216,  0.5059,  0.6941,  0.3333, -1.0000],\n",
      "         [-0.9843, -1.0000, -1.0000, -1.0000, -0.4824,  0.5686,  0.7412,\n",
      "           0.8588,  0.8745,  0.8980,  0.9294,  0.9059,  0.9137,  0.7333,\n",
      "           0.7255,  0.5137,  0.4980,  0.4039,  0.4275,  0.4275,  0.4196,\n",
      "           0.3804,  0.3020,  0.3176, -0.2235, -0.5451, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -0.6863, -0.5216, -0.6549, -0.4353, -0.6784, -0.7255, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000],\n",
      "         [-1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000,\n",
      "          -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000, -1.0000]]]), 9)\n"
     ]
    }
   ],
   "source": [
    "print(train_set[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "3f2cf641",
   "metadata": {},
   "outputs": [],
   "source": [
    "# got labels here https://github.com/pranay414/Fashion-MNIST-Pytorch \n",
    "text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',\n",
    "                'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0940e14e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB4AAAAPBCAYAAAAf6bccAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAC4jAAAuIwF4pT92AAEAAElEQVR4nOzdeXwV1f3/8c/NvpGFsIQlJILsooAIgspOKSoqSlWoAlpb61JFq7X6tSpatyriVmldsVZxB3dFWWRXNkEWBREQSAIkJCEhezK/P/hlmpB7PvdmcrMNr+fjweNxw3vmzJl758w5M+cuHsuyLAEAAAAAAAAAAAAANHtBjV0BAAAAAAAAAAAAAEBgMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAEMAAAAAAAAAAAAAC7BBDAAAAAAAAAAAAAAuAQTwAAAAAAAAAAAAADgEkwAAwAAAAAAAAAAAIBLMAFcD+677z7xeDzi8Xjkvvvuq1NZu3fvtstKTU0NSP0CLTU11a7j7t27G7s6gOtMmzbNbmNz5swJSJlz5syxy5w2bVpAygRwDG0WCKzhw4fbx/+SJUsauzoAmgD6WqBh+HN/a8mSJfYyw4cPb9D6AWhe6qP/Bpo7+lrUJyaAAQAAAAAAAAAAAMAlmAAGHArkJ73RePgEe+Dx6QnUJ9ps4NFmAQBV0dcGHn0tAAAAgIbGBDAAAAAAAAAAAAAAuERIY1cAANDwpk2bxqcPgGaENgsAQP2irwUAAADgJnwCGAAAAAAAAAAAAABcgglgAAAAAAAAAAAAAHCJZjkBvGfPHpk9e7ZMmjRJTjnlFImLi5PQ0FBJTEyUPn36yHXXXSerV6/2q6xp06aJx+MRj8cjc+bMERGRgoICee655+Tss8+Wtm3bSnh4uCQnJ8ukSZNkxYoVAd2XjRs3Srt27ew6jB8/XgoLC+tUZlZWlsycOVPGjBkjycnJEhERIfHx8dKrVy+54YYbZO3atQGqvdkPP/wg06dPl169eklsbKzExsbKqaeeKnfffbdkZGTUqqzMzEx55JFHZNiwYdKuXTsJDw+XVq1aSb9+/eT222+XrVu31rp+X3zxhVx99dXSrVs3iY2NlcjISElJSZEJEybInDlzpLS01Lju8OHDxePxyIwZM+z/mzFjhv0aVv3HV4g1Tbt377Zfoz179tj/f9JJJ3l9HZcsWVKn7e3du1dmzJghQ4cOtc8pYWFhkpiYKKeddppMnjxZZs+eXau2Udfz1Jw5c3wep0uWLLGXGT58uP3/n376qUyaNEm6du0qMTEx4vF45Mknn7TPp1dddZW97Kuvvur1Oa1aHuALbZY2C3eqqKiQV199VcaMGSNJSUkSEREhqampcuGFF8r8+fP9LqdybFa1/aenp8tDDz0kAwcOlKSkJAkODpb4+Hiv65eWlsprr70ml156qXTu3FlatGgh0dHRctJJJ8mkSZNk3rx5YlmWX3VZs2aN3HjjjdK/f39JSEiQkJAQiYyMlHbt2smZZ54p1113nbz99tty9OhRYxmZmZny+OOPy+jRo6V9+/YSEREhoaGhEh8fL71795aJEyfKE088Ibt27fL7OQJ8oa+lr0XDqvraV1qzZo1cc8010q1bN4mOjpaWLVvKwIED5eGHH5YjR474LDM1NdUuc/fu3T6X93Y/rKHU5Z7ME088Ydd77Nixfm9z5cqV9notW7aU4uJi47JHjx6V2bNny/jx4yUlJUWioqKkRYsW0rVrV7n66qtl0aJFPrfn7ZxSXl4ub775plx44YXSuXNniYyMFI/HU6txD5qOuvRlDXE/euHChfLHP/5RevfuLS1btpTw8HBp3769jB07Vp599lm/7z8H8j58bXz11VfSokUL+3m69tprpaKiosZylmXJvHnzZOrUqdKtWzeJi4uTiIgISU5OlosuukheffVVKSsrU7dVdRyUmppq///y5cvlmmuukR49ekhcXJx4PB6ZPn16gPcU9YW+lr6WvlZErGbmtttuszwejyUiPv9dfvnl1tGjR9Xypk6dai//yiuvWFu2bLF69uyplnvPPfeoZd577732svfee69xua+//tqKi4uzl50yZYpVWlpabZldu3bZeUpKis/n59lnn61Wprd/Ho/Huvrqq63i4mKf5fkjJSXFLnvXrl3W888/b4WHhxu3n5CQYH3wwQd+lf3SSy/53J/g4GBr+vTpVllZmc/yDhw4YI0aNcrnsdO1a1drzZo1XssYNmyYX8efiFhTp06tzVOJBlK1Xfnzb/HixY639e9//9uKjIz0aztnnXWW1zLq4zz1yiuv+DxOFy9ebC8zbNgwKycnx5owYYLX7c2aNataPX39GzZsmOPnFCce2ixtFu6Tnp5uDRo0SD3uJkyYYB05cqTa2Mtb+z4+nz9/vpWQkFCjvLi4uBrrLl682OrSpYvPNnDmmWda+/btM+5PaWmp9Yc//MHvNvV///d/Xssx1d3bvw4dOjh9+oEa6Gvpa9Gwqr72lnXsPlJQUJB6zl+5cqVa5vH3Znw5vh1548/9rePbhSYQ92TS0tKs4OBgS+TY/aD09HSf+2pZlnXdddfZ5f/hD38wLvf2229bSUlJPut4/vnnWzk5OcZyjj+n7N+/3zr77LO9ljVv3jy/9gFNR137svroxyr98ssv1vDhw33Wq3379tbSpUvVsur7PrzJW2+9ZYWFhdnL3nXXXV6X27hxo9W3b1+fdevevbu1ZcsW4/aOv/9eXFxsXXvttV7Luvnmm9V9RNNBX0tfS19rWSHSzOzdu1csyxKPxyPdu3eX7t27S2JiooSGhkpWVpZs2LBBdu7cKSIib775phw5ckQ+/vjjau/0MElLS5PRo0dLenq6xMfHyznnnCNJSUmSmZkpixYtktzcXBERuf/++6VXr15y2WWXOd6PDz74QC6//HIpKioSEZFbb71VHn/8cb/qaTJ9+nR56qmn7L9btWolgwcPlqSkJCkqKpINGzbI5s2bxbIsefnllyUtLU0++eQTCQoK3AfBP/jgA/udUB06dJCzzz5bYmJiZPv27bJixQqpqKiQ7OxsmThxonz00UfqO0gef/xxuf322+2/w8PDZdiwYdKpUyfJzs6WxYsXy+HDh6W8vFyefPJJ+eWXX+Tdd981PocHDhyQs846yz4+RES6dOkigwYNkvDwcNm6dat88803IiKyY8cOGTFihHz++edy1llnVStnwoQJcsopp8i3334ra9asERGRM844QwYOHFhjm2eeeaZ/TxwaVGxsrNxwww0iIvKf//xH8vLyRERkypQp0qJFixrLd+jQwdF25s+fL9dee2217Q4ePFg6duwoISEhkpubK9u3b5fNmzdLSUmJX2U25HmqKsuy5IorrrDPpwMGDJBevXqJZVmyefNm8Xg8Mnr0aImJiZEffvhBFi5cKCIiPXr0kFGjRtUor2vXrgGpF04MtNnao82iKcvJyZGRI0fKtm3b7P876aSTZPDgwRIeHi5btmyRb7/9VubNm1frcerKlSvlvvvuk9LSUklMTJShQ4dKq1at5ODBg7Jhw4Zqy77zzjvy29/+1n7nc2RkpJx55pmSmpoqQUFBsn37dlm1apWUlZXJ6tWrZfDgwbJmzRpp27Ztje3efvvt8vzzz9t/d+jQQQYOHCitW7eWiooKycrKkq1bt8qPP/5orPvatWtl4sSJ9icUqtYnPDxcjhw5Ijt37pTvv/9eCgoKavW8AL7Q19YefS0C5emnn7a/Yezkk0+WQYMGSVhYmHz//ff2N7jt379ffv3rX8vXX38tffv2bcTaOheoezLt2rWTkSNHypdffml/ysfXJ/JKS0vl7bfftv++8sorvS43a9Ys+fOf/2x/80fVc1R5ebls2bJF1q5dK5ZlyccffyzDhw+XFStWSFRUlLr94uJiueCCC2TdunUSEhIiQ4YMkS5dukhxcbGsX79eXRdNT6D7skD2Y9u2bZNRo0ZJenq6iBz7BGT//v2lV69eEhkZKfv375elS5dKXl6epKWlyZgxY+Szzz6TESNGeC2vPu/Dmzz33HPypz/9SSoqKsTj8cgTTzzhtY0vXbpUxo8fb39qMzQ0VM444wzp2rWrhIaGyu7du2X58uVSVFQkP/74owwZMkRWrVolPXv29FmHW265Rf7973+LiEifPn3ktNNOk9DQUNm+fXtA76Oj4dDX0teesBpl2rkO/vGPf1ivvPKKdejQIeMyS5cutU4++WR7dv+1114zLlv1XRiVn1q94447arxjKSsryxo5cqS9bOfOna2KigqvZfp618aLL75ov4NCRKyHH37YWD9/PwH80ksv2cvFxsZaL7zwglVSUlJjuUWLFlkdOnSwl3300UeNZfqr6jtfwsLCrKCgIGvmzJlWeXl5teW2bNli9e7d2142KSnJOnz4sNcyV6xYUe05GjdunJWRkVFtmaKiIuv222+v9k6OmTNnGus5btw4e7no6Ghr7ty5NZZZs2aN1blzZ3u55ORkKzs722t5/n7SG01bbd+5VRtV34V44403Gt8JmZeXZ7399tvWHXfc4TWvj/NUbT/hEBISYomI1adPH2vTpk01li0qKqpV2YBTtFnaLJq/q6++utrY8aWXXqqxzDfffGO396rv/vf1CeCQkBDL4/FYDzzwQI2xcNXjfvPmzfanNjwej3Xbbbd5HfPt3Lmz2juIx40bV2OZzMxMu80FBwdbc+bMMbbltLQ06+mnn7ZefPHFGtlFF11kb+eSSy4xjpMLCwutTz75xLr22mu95kBd0dfS16L+Vb2PERYWZkVERFj//e9/ayy3fPnyavdw+vTp4/Vej2U1/U8lBfKezKuvvmovc/rpp/vc1w8//NBe/qSTTvJ6Hvjqq6/sT4aFhYVZjzzyiNdz1IYNG6xevXrZ5V133XVet1m13VeeL4YNG+b1tal6vkDTF4i+rD76sfz8/GqfIh43bpz1008/1VguNze32qf02rVrZ/yEXX3eh/d23rnvvvuqtRtTWenp6VabNm3sZadMmWKlpaXVWC4jI6PaN3X06dPH6zdIVr3/Xnk/Ojk52esnpGmvzQd9LX1tVSdq2212E8D+2rVrlxUREWGJiDVw4EDjcsd/JdOdd95pXDYjI8OKjo62l129erXX5bRG+/DDD1frUF544QWf+1G5vGkC+MiRI1Z8fLzdcEz1qrR161b7uUlMTPT59Ry+VD3xiYj1yCOPGJdNT0+3WrVqZS/7t7/9zetyQ4cOtZcZMmSI+nXVN910k71sbGysdeTIkRrLLFq0qFodP/74Y2N5u3btqva10zNmzPC6HBPA7lBfN7jy8vKqdaSmAbo/6uM8VdsbXCLH3rShDfprUzbgFG2WNovm7ccff6z2NXJz5sxRl42Kiqp2XPuaABYR6+9//7vPelS9kfbEE0+oy+bn51e7+Dy+nX700Ud29tvf/tbntk0SExPtm4B5eXmOywHqir6Wvhb1r+pxJCLWm2++aVx28+bN1X5my9sbpyyrad+UDvQ9mby8vGpjhB9++EHd18suu8xe9u67766Rl5eXW127drWXef/999Xy0tPTrbZt21oiYoWGhlp79+6tsUzVdi9ybEKhoKBALRdNX6D6svrox+6//357mQkTJtT4YI5WB+1erj+c3Ievet4pLy+3rr/+ejuLjIy0PvnkE2M5Vd9QetNNN6l1Kysrqzb293a+Pf6nMKKioqwff/zR946jSaOvpa+FZbn2OwtSU1Ptr69Ys2aNXz/i3bp1a7nnnnuMedu2beW8886z//7222/9ro9lWXLrrbfKnXfeKSLHvs74nXfekWuuucbvMkxefvllycnJERGR66+/XgYNGqQu37NnT5k6daqIiGRlZcnnn39e5zpUOumkk+TPf/6zMU9KSqr2HL/00kv2x/0rbdu2TZYuXWr//eyzz0pYWJixzIceekhatWolIiJHjhyRN954o8YylV/bISJywQUXVHsdj5eamip33XWX/fe//vWvGnUEfKl6zklMTKzT199UVZ/nKV/uueceu60BbkObBRpG1bHfwIED7TGpN926dfP5NVPHa9++vdxxxx3qMhs3bpRFixaJiEi/fv18biM6Olr+9re/2X+//vrr1fKq54/WrVvXqr7eyomKipKYmBjH5QBNFX0t4N0555yjfqVr79697a9oFxF54YUXGqJaARXoezIxMTFy0UUX2X//97//NZaXl5cnH374of33FVdcUWOZjz76SHbs2CEiIhdddJFMmDDBvDNy7N5W5fjh+K+8NHn00UclMjLS53Jo2uqjLwtEP1ZaWirPPvusiBy75/yvf/3L51cVP/TQQ3b9jx/f1paT+/CVSkpKZNKkSfLcc8+JiEhCQoJ8+eWXcu6553pd/tChQ3abT0pKkkcffVQtPzg4WB588EH7b3/29cYbb5Ru3br5uwtoBuhrq6OvPXE06wngyt98feihh+Qvf/mL/OlPf5Ibb7zR/rdr1y4ROTb5unHjRp/ljR8/XiIiItRl+vXrZz/evXu3X/UsKyuTqVOnyqxZs0Tk2Peaf/755z4Pcn99+umn9uPJkyf7tc7IkSPtx8uXLw9IPSq3HxKi/7T0FVdcIcHBwSJy7Hcujv8ttMWLF9uP+/btW+059yY6OlomTZrkdX1v/3f11Ver5YmIXHXVVfZAKT09Xf29NsCbVq1a2eeTzZs3y4oVKwJSbn2dp/wRqN9LA5oi2izQMKqOyUy/CVSVNkHszcSJE32ORauOnSdNmuTXjTtt7JycnGw/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qF+RNXfuXK+/i1bV66+/bi/Trl076d69e7V85MiR9uMNGzb4HEAUFBTIm2++6XX9SiNGjLAfz5kzRy2vcpnKr2ho3759jTqKSLWvOmlKxxpqp7FfR4/HY39DgIjYvx3TnDX2cwp3a+zjizYL1E3VMVnVdw6b/Oc//wl4HaqOnd9///0Ga8ctW7aUs846y/7b6XarfqLEDecgND2N3S/Q1+JEU9v+8IwzzvD6+35Vv9L0u+++U8tbu3at7Nq1y+861lV93JOpdNJJJ8mQIUNE5Ninnip/3uGNN96wl9G+klKk+tjg5ZdflqKiIp91BDQN3ZedddZZEh8fLyIi+/btk48++qjOZTbUffi4uDj58ssv/Z4EHjt2rISEhIjIsUmujRs3OtouTiz0tTXR154YmtUEcOfOne3H2junduzYITNmzGiIKtVK5STweeedJyLHfpw7EJPA1157rd3Jr1+/vlb7npmZ6XPCtjZ27twps2bNMuYHDhyQ+++/3/77d7/7XY13Q/fo0UOGDh1q/33jjTeqg4i7775bDh48KCLH3oUzefLkGstce+219uN58+apn7jYs2ePPPjgg9XW9faO7cTERPux9hV+aNrq63XMy8uTkpISv5at+tWWVd+t1VzRNlCfaLOBR5tFQ/rd735nP169erV6If7TTz+p40qnBg4caP/GWWFhoVx55ZV+t/+SkhLJzs6u9n+1+YSy6fxRXFws+fn5dSoDCBT62sCjr4VmyZIl8u677xrzbdu2ybPPPmv/XfWbIKqq+smaV1991VheWVmZ3HzzzQ5q6lx93JOp6sorr7Qfv/7667Jy5Ur7pnuHDh28flCgqksuuUROPvlkERFJT0+X66+/3u8PV+Tn59fq9xbRvDXVviw8PFymT59u/3399dfXqr/xNkHdkPfhvU0Cm74OukOHDvZEk2VZMmXKFDly5Ihf26moqJBDhw7Vqa5onuhrq6OvPXE0qwngqu+cuvXWW70exAsXLpThw4dLXl6e13dpNLawsDB5//33AzoJHBcXV+3m2IwZM2Tq1KnG77a3LEtWrFgh119/vXTq1EkKCwsdb/t4YWFhcscdd8hTTz1V40fOt23bJmPGjLEna9u2bSu33HKL13IefvhhCQ4OFhGRZcuWySWXXGKvV6mkpETuvPPOavt+7733VvvR80ojRoyQcePG2X9PnDhR3nnnnRrLrVu3TkaPHi05OTkiIpKcnCw33XST1zqecsop9uMFCxY02Hf6I7Cqvo7ejgmn1q1bJ6mpqXLffffJ1q1bvS5TXl4ub731ljzzzDP2/1U9Tpurqs/pN9984/dvPAL+oM0GHm0WDalbt27VfhP0mmuu8XrhvHbtWhkzZowcPXrU5++NOfHMM8/YY8Yvv/xShg4dKt98841x+e3bt8sDDzwgqampNb6u6plnnpG+ffvK7Nmzjb9llJ+fL//3f/8na9asEZFjXyn2q1/9ys7T09MlOTlZbrvtNlm7dq2xHl9++aXce++99t9uOAeh6aGvDTz6WmjCwsJkypQpMnfu3BrZqlWrZOzYsfanZHr37l3tBmxVl112mf2JvVWrVslf//rXGm/437dvn5x//vmycuVKCQ8PD/CemNXHPZmqLr30Unu8sGjRInn88cftbNKkSdU+yehNcHCwzJ49274P9corr8h5552nfg3td999J3fccYckJyc36Ce80Liacl/25z//WXr37i0ix95sNGDAAHnnnXdq3J+tlJmZKc8//7z0799fHnvssRp5Q9+HP/7roDMyMoyTwA8++KC0a9dOREQ2bdokAwcOlAULFhjL3rdvn8yaNUu6d+8ub731Vp3qieaJvvZ/6GtPLCGNXYHamD59urz44oty6NAhOXz4sPz617+W/v37S69evcTj8cj69etly5YtInLs6yDatGkjr732WiPXuqbKSeCLL75YPvnkE3sS+LPPPpOzzz7bUZnTpk2Tn3/+WR544AEROfaVBa+//rr07dtXevToITExMZKfny/79u2T7777rt4mK//xj3/I9OnTZfr06fL444/L2WefLTExMbJ9+3ZZvny5PegICQmRl19+WVq2bOm1nCFDhsgjjzwit99+u4iIfPTRR9KpUycZMWKEJCcnS3Z2tixevLjaJy4mTJhgnFAWOXZSOeuss2Tnzp2Sn58vl156qXTt2lUGDRokYWFhsnXrVvnmm2/sd55ER0fL3Llz7U9XH2/gwIGSnJwse/fulfT0dOnRo4f86le/klatWtnvmDnjjDPksssuq/XziIZzySWXyL///W8REXnuuedk3bp10r9/f4mKirKXue6666RLly61Ljs9PV1mzJghM2bMkKSkJOnbt68kJSVJSEiIHDhwQNatW1ftN1XOOeccufzyy+u+U40sKSlJhgwZIitXrpSioiI57bTT5Ne//rW0a9fOHgx06dJFrrvuukauKZoj2mzg0WbR0J544glZtWqV/Pjjj1JcXCzTpk2T+++/XwYPHizh4eGyZcsW+fbbb8WyLLn44oslKytLvv7664DW4ZRTTpG5c+fKZZddJgUFBfLNN9/ImWeeKV26dJH+/ftLy5YtpaioSA4ePCibNm3y+QmKjRs3yvXXXy833HCDdOnSRU455RRp1aqVlJaWSnp6uqxcubLaJ3z/+te/SnJycrUycnJyZObMmTJz5kxp2bKl9OvXTzp06CARERF2PX7++Wd7+W7dujX4u8pxYqCvDTz6Wmgq76NMnjxZ7r33Xhk0aJCEhobK5s2b7TcOiYjExMTIq6++anxjVEpKivzxj3+U5557TkREHn30UZk7d64MHTpUIiIiZOfOnbJixQopKSmR0aNHS1JSkl9fiRkogb4nU1VCQoKce+65Mn/+fCkvL5f58+fbmekm/vFGjx4ts2fPluuuu07Ky8vls88+k88//1x69eolp556qsTGxkpBQYGkp6fLxo0b+RThCayp9mUxMTHy4YcfyujRo2XXrl2SkZEhl156qbRq1UrOPPNMSUpKEsuy5PDhw7J161bZsWOHfZ/W2yf3GuM+fHx8vCxYsEDGjBkja9eutSeBFy9eLD169LCXa9++vXzwwQdy7rnnSmZmpvz4448yduxY6dChgwwcOFBat24tpaWlkpmZKZs3b2biCPS19LUnLquZWblypdWqVStLRIz/LrroIisnJ8eaOnWq/X+vvPKK1/L8WaaqV155xV5+6tSpXpe599577WXuvfdeY1lFRUXWeeedZy8bExNjLVu2rNoyu3btsvOUlBSf9Xvrrbes9u3bq89P1X8DBw60ioqKfJarSUlJscvbtWuXNXv2bCssLMy4zfj4eOv999/3q+wXX3zRio2NVfchODjYuvnmm62ysjKf5WVkZFgjR470+bycfPLJ1rfffuuzvI8++kjdV9MxgqZl0qRJ6vGwePHiWpe5evVqKyQkxO+2OHHiROvIkSNey6qP85Q/yyxevNheZtiwYf7t+P+3Zs0aq0WLFsb9rW15QFW0We/L0GbRnOzfv98aMGCA2s4uuOAC68iRI9awYcPU9u0r13z33XfW6aef7nfbT01NtTZs2FCtjMcff9zv9cPCwqwZ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ALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACAS3gsy7IauxIAAAAAAAAAAAAAgLrjE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAAAAAAALgEE8AAAAAAAAAAAAAA4BJMAAMAAAAAAAAAAACASzABDAAAAAAAAAAAAAAuwQQwAAAAAAAA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yPr162XKlCny6aefGsvZs2ePjBo1StLT0+3/6927t/Tv3188Ho+sX79eNm/eLP/6178kKirKr7qlpaVJeXm5iIh07txZevbsKa1bt5aIiAjJycmR77//XrZs2SIix941Onr0aFm9erWEh4f7VT5wPNosbRbNW2xsrNxwww0iIvKf//xH8vLyRERkypQp0qJFixrLd+jQwdF2AnGuOF5aWpqMHj1a0tPTJT4+Xs455xxJSkqSzMxMWbRokeTm5oqIyP333y+9evWSyy67zFHdj2dZllxxxRXy8ccfi8fjkQEDBkivXr3EsizZvHmzeDweGT16tMTExMgPP/wgCxcuFBGRHj16yKhRo2qU17Vr14DUC/Vj7969YlmWeDwe6d69u3Tv3l0SExMlNDRUsrKyZMOGDbJz504REXnzzTflyJEj9rHhS0Mewx988IFcfvnlUlRUJCIit956qzz++ON+1dNk+vTp8tRTT9l/t2rVSgYPHixJSUlSVFQkGzZskM2bN4tlWfLyyy9LWlqafPLJJxIUFLgvSvrggw/sTwp06NBBzj77bImJiZHt27fLihUrpKKiQrKzs2XixIny0UcfydixY41lPf7443L77bfbf4eHh8uwYcOkU6dOkp2dLYsXL5bDhw9LeXm5PPnkk/LLL7/Iu+++a3wODxw4IGeddZZ9fIiIdOnSRQYNGiTh4eGydetW+eabb0REZMeOHTJixAj5/PPP5ayzzqpWzoQJE+SUU06Rb7/9VtasWSMiImeccYYMHDiwxjbPPPNM/5441DvGyIyR0bzQZmmzaBoCfd0YyPH2tm3bqrUdj8cj/fv3l169eklkZKTs379fli5dKnl5eZKWliZjxoyRzz77TEaMGOG1vPq8zjB57rnn5E9/+pNUVFSIx+ORJ554wuunbpcuXSrjx4+XI0eOiIhIaGionHHGGdK1a1cJDQ2V3bt3y/Lly6WoqEh+/PFHGTJkiKxatUp69uzpsw633HKL/Pvf/xYRkT59+shpp50moaGhsn379oBeJ6A6rmvNuK7lutaxRpx8braqvrPoxhtvNL7bJC8vz3r77betO+64o0a2evVq66677rK+//5743YOHDhgXXnllfa2Ro0aZVy26rsuK9+FccYZZ1jbtm2rtlxFRYX15JNPVnu3wtdff20st+q7JuLi4qyPPvqoxjKffvqplZCQYImIFRoaWu1dId689NJL1jPPPGPt27fPuN2NGzdaAwYMsMt64IEHjMvyrkv4QputjjaL5syfd/c7FYhzhWVVf5dpZfu+4447apSXlZVljRw50l62c+fOVkVFhdcya/sJ4JCQEEtErD59+libNm2qsWxRUVGtykbT9o9//MN65ZVX1E/TLF261Dr55JPt1/q1114zLlsfx7Cvd0q/+OKL1T6V8/DDDxvr5+87pV966SV7udjYWOuFF16wSkpKaiy3aNEiq0OHDvayjz76qLFMf1U9V4WFhVlBQUHWzJkzrfLy8mrLbdmyxerdu7e9bFJSknX48GGvZa5YsaLaczRu3DgrIyOj2jJFRUXW7bffXm3cMHPmTGM9x40bZy8XHR1tzZ07t8Yya9assTp37mwvl5ycbGVnZ3stz993xKNpYIxcHWNkNHW02epos2gsgWiL9THezs/Pr/bpxnHjxlk//fRTjeVyc3Ot6667zl6uXbt2Vk5Ojtcy6/M6w9sngO+7775q17SmstLT0602bdrYy06ZMsVKS0ursVxGRka1b8Xq06eP108SVr2+qBxvJycne/2EdNVraQQW17XecV3LdW1dMAFcS3l5edUOEtPJIJCqHsBbt271ukzVQbfIsY+y5+XlGcucOHGivewf//hHr8ssWLDAXsbj8ViLFi0ylrd06dIaX9FQ1xvzOTk5VlJSkj0YMX3Un0E3NLRZ72izaK7qawI4kOeK479a+c477zQum5GRYUVHR9vLrl692utytZ0Arhxw+/P1erTJE8euXbusiIgIS0SsgQMHGperj2NYu4B6+OGHq91weeGFF3zuh68L5SNHjljx8fH2haqpXpW2bt1qPzeJiYk+v07Ml6rnKhGxHnnkEeOy6enpVqtWrexl//a3v3ldbujQofYyQ4YMUb/W66abbqp2k+DIkSM1llm0aFG1On788cfG8nbt2lXt67lmzJjhdTk3XSi7HWNk7xgjo6mizXpHm0VDC1RbrI/x9v33328vM2HChBoTNFodtLGqP5xcZ1SdAC4vL7euv/56O4uMjLQ++eQTYzlXX321vexNN92k1q2srKza5N6bb77ptf5VX4+oqCjrxx9/9L3jaBRc15pxXct17fH4zoJaqvxaCRGRxMTEOn10319Vf1D6q6++8mudRx55RGJiYoz51VdfbT/+9ttvvS7z4osv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bbR9h3vQZmmzcJdTTjnFfvzOO+8ErNxAnCuaq6rP6TfffOP377Cgaah6nr711lu9XuwsXLhQhg8fLnl5eU3yPB0WFibvv/9+QC+W4+Liql2czpgxQ6ZOnWo8vi3LkhUrVsj1118vnTp1qtHP10VYWJjccccd8tRTT9nvNK60bds2GTNmjH1R27ZtW+ON54cffliCg4NFRGTZsmVyySWX2OtVKikpkTvvvLPavt97770SExNTo7wRI0ZUO4dNnDjR63l13bp1Mnr0aMnJyRERkeTkZLnpppu81rHq+WTBggU+f5MRjYcxMmNkNC+0WdosmoamfN345z//WXr37i0ixyYsBgwYIO+8806N8WelzMxMef7556V///7y2GOP1cgb+jrj+K+DzsjIME4CP/jgg9KuXTsREdm0aZMMHDhQFixYYCx73759MmvWLOnevbu89dZbdaon6gfXtd5xXct1bV2FNHYFmqP09HSZMWOGzJgxQ5KSkqRv376SlJQkISEhcuDAAVm3bl21760/55xz5PLLL7f/7tGjh1x55ZX219TMnDlT3njjDTnjjDOkTZs2snv3blm6dKmUlJRIixYt5LHHHpM//vGPDb6fIiIvvfSSDB48WA4cOCDZ2dly3nnnySmnnCL9+/cXj8dT7aP6t956q7z33nvqj7BPnTpVZs6cKdu3b5fi4mK58sor5aGHHpL/x959h0dV5v//f096J4USAqGDSJEiRRCk2JAVy+KK2MBe1sK666r7set3dde6otj72lexrWIDpEuXDlIiEALppPfz+8Ofs0Tyfk84JAQOz8d1cV0Jr3Puc8/Mucs598ykT58+EhERIWvWrJGlS5eKiEifPn3k9NNPl3/+85+H5LHCu2iztFl4x/jx4+X5558XEZFp06bJsmXLpH///hIVFeXf5rrrrpPOnTsfcNkH21ccqZKTk2Xo0KGyYMECKSsrkz59+siYMWOkdevW/q9h6ty5s1x33XVNXFPUZcqUKfLSSy9JVlaW5ObmypgxY6R///7So0cP8fl8snz5clm7dq2I/PJ1aS1btqzX1ykear9eLP/+97+X//73v/6L5S+//FKGDRvmqszJkyfL1q1b5YEHHhCRX74i8q233pK+fftK9+7dJSYmRoqKimTnzp2ycuXKRruo++c//ylTpkyRKVOmyKOPPirDhg2TmJgY2bRp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q7oE0hTjO7zFbTv5+uuv1czqQ8LDw9WssrJSzax2WVRUpGbl5eVqlpKSomZZWVlqZj2+7du3q5mIyF133WXmmsmTJ6vZa6+95qrMI9mhnuu5bSe7d+9WszfffNPc98svv1SzmTNnuqqPW4MHD1az888/X82sx2CN39acIDIyUs0++OADNRsxYoSaBWKNtXv37lUzq28qLS1Vs127dqlZQkKCmvXt21fNjjZu27N17m3cuNE85jHHHKNm9913n5q98soralZcXKxmHTt2VLOLL75YzRpDfn6+mn311VdqtnLlSjXbunWrmkVHR5v16dy5s5pZ4/uePXvUrKSkRM2secHOnTvVrG3btmp2OGiMeyBux+imuNdrzen+9re/qZnVj7Rr107NOnTooGaJiYlqFhsbq2affvqpmsXHx6vZ9OnT1eyHH35QM+s+cKB7DBs2bFAz67U48cQT1SwtLU3N1qxZY9YHRx5rbmVdg1r9y/33369mLVq0ULO4uDg1c3ufLtCamMaax1rX31bfEmhfK7NeJ+t+4uzZs836HG74BDAAAAAAAAAAAAAAeAQLwAAAAAAAAAAAAADgESwAAwAAAAAAAAAAAIBHsAAMAAAAAAAAAAAAAB7BAjAAAAAAAAAAAAAAeAQLwAAAAAAAAAAAAADgET7HcZymrgRwsFauXGnmwcHBatajRw81+/zzz9WsrKxMzYqKitTskksuUbOwsDA1A35ldds+n+8Q1sR23HHHqdnq1avNfd999101KygoULO7775bzaw2+/e//13NrrvuOjVDwziYczojI0PNrr/+ejVr1aqVmlnnSlCQ/t656upqNbMeR1VVlZpZrLGtsrJSzbZu3apmixYtclUXkSOnb0LTstqJdU6Xl5erWdeuXdUsOTlZzTZu3KhmFRUVambN12JjY9UsPT1dzc455xw1++GHH9Rsz549ahYTE6NmIvZ42r59e3NfzdNPP61mZ555pqsyD3dW39cY/aK135QpU9Rs8eLFahYXF2ce0zrPhgwZombTpk0zy21o1tj3zjvvqNns2bPVLC0tTc0KCwvVbMOGDWo2evRoNTv11FPVTERk586dama1aWuuERISomahoaFqZvW9N9xwg5odqRqjPVvtMi8vT82svlbEPscmTZqkZtb5fuGFF6rZBx98oGa9e/dWM7fn5aG2Zs0aNXvmmWfM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AAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAAAAAAAAAAAAA8ggVgAAAAAAAAAAAAAPAIFoABAAAAAAAAAAAAwCNYAAYAAAAAAAAAAAAAj2ABGAAOc5MnTxafzyc+n09ee+21Binztdde85c5efLkBikT8CLaHwAAB27kyJH+sW727NlNXR0AAACgyf06P/b5fE1dFRwlWAAGAAAAAAAAAAAAAI9gAbgeOnTo4H9nRlpaWlNXB0ADon03PD7dCDQd2h9wZGmMbxkAAHgD16oAjkbMjwGg4bAADAAAAAAAAAAAAAAeEdLUFQAAHHqTJ0/m04FAE6H9AQAAAAAAAGhMfAIYAAAAAAAAAAAAADyCBWAAAAAAAAAAAAAA8AgWgBVpaWn+Pzj/888/+/+/Y8eO/v/f99/s2bP92+z7/7/68ccf5eabb5ZevXpJYmKi+Hw+Oeecc+o89qJFi+SGG26Qnj17SkJCgkREREjbtm1lzJgx8vTTT0txcXHA+k+ePNlfh9deey3g9q+99pp/+0BfSzlz5ky54oorpHfv3hIfHy8hISESFRUlbdu2leHDh8uUKVPk888/l4qKioDHzcnJkccee0xOPfVUSU1NlYiICImPj5cePXrIH//4R1m6dGnAMu69915/3e+9914RESktLZWXX35ZTjvtNGnXrp2EhYWJz+eTlStXBiwP3ncw7duNHTt2yH333ScnnXSStGrVSsLDwyUsLEySkpKkT58+cuGFF8qzzz4ru3fvrneZJSUlMm3aNBk2bJi/zNTUVJk4caLMnz8/4P71afOzZ8/2bzNy5Ej//3/xxRcyceJE6dq1q8TExIjP55Mnn3zS3+9cdtll/m1ff/31Op/TfcsDGltDt0HaH3BoFRQUyNSpU2XcuHHSoUMHiYmJkfDwcElJSZGTTz5Z7rvvPlm7dq1ZRnZ2tjz88MMyYsQIad26tYSHh0vz5s2lX79+cuutt8q6devqXZ/169fLE088Ib///e/lmGOOkdjYWAkNDZUWLVrIgAED5E9/+lPA8jp06CA+n09ef/11//9ddtlldbbZX+e3wOGgpqZGXn/9dTn11FMlOTlZIiIipEOHDnL22WfLxx9/XO9yRo4cud9cOyMjQ/7+97/LoEGDJDk5WYKDgyU+Pr7O/SsrK+XNN9+U888/Xzp16iSxsbESHR0tHTt2lIkTJ8r06dPFcZx61WXJkiVyww03SP/+/SUhIUFCQkIkMjJSWrduLSeccIJcd9118v7775vX4dnZ2fLoo4/KKaecIikpKRIRESGhoaESHx8vPXv2lPPOO08ef/xx2bZtW72fIxyduBel414U8D/Mj++td92Aw92SJUvkyiuvlG7dukl0dLQkJibKoEGD5KGHHpKCgoJ6lbF3715555135JprrpHBgwdL8+bNJSwsTOLi4qRz584yceJEef/996WmpuaA6rZz5065/fbbpXfv3hIXFydxcXHSs2dP+dOf/iQbNmwQkdpzlw4dOhzow0djc1Cnbdu2OSJS73+zZs3y77vv/zuO49xzzz1OcHDwfvucffbZtY5ZVFTkTJgwIeCxWrdu7XzxxRdm/SdNmuTf/tVXXw34eF999VX/9pMmTapzm6KiIuess86q93Py4osvmsd8+umnnWbNmpll+Hw+5/LLL3fKy8vVcu655x7/9vfcc4+zbt06p2fPnnWWt2LFioDPBbzvYNr3gXr++eedyMjIeh3nxBNPrLOM37bntWvXOscee6xZ1t13323Wqz5tftasWf5tRowY4eTn5zvnnntuncd74oknatUz0L8RI0a4fk6BA3GwbZD2BzStZ5991klISKjXuf3ll1/WWcbLL78ccM4ZHBzsTJkyxamqqjLr84c//KFedfH5fGZ57du3r3ebveeeew72aQQaREZGhjN48GDzfD333HOdgoICZ8SIEeZc+rf5xx9/XGdbb9as2X77zpo1y+ncuXPAtnPCCSc4O3fuVB9PZWWlc/XVV9e7Lf7f//1fneVoda/rX5s2bdw+/ThKcC9qf9yLAmpjfsz8GEeuusbqoKAgc+64YMECs8wPP/zQCQ8Pr1fb6dOnj7N169Z61fWdd95xYmNj1bLCw8OdF198sdbcpX379gf7FKGBhQjqFBcXJ3/84x9FROSNN96QwsJCERG59NJLJTY2dr/t27RpU2c5jzzyiNx3330iItK5c2cZNGiQREVFSVpamoSGhvq3KykpkdGjR8vixYv9/5eSkiLDhw+XmJgY2bx5s8ybN0+qq6slIyNDzjrrLHnnnXfkvPPOa7DHHMjFF18sn376qf/3Ll26SL9+/SQxMVEqKyslKytLVq9eLWlpaQHLmjJlivzrX//y/968eXMZMmSIJCcnS1lZmaxYsULWrFkjjuPIK6+8Irt27ZL//ve/EhRkf2g9JydHxowZI9u3b5eIiAgZNmyYtG/fXoqKimTRokWuHzu8paHadyAff/yxXHPNNbWOO2TIEGnbtq2EhITI3r17ZdOmTbJmzZp6vUtZRGTXrl1yyimnSEZGhsTHx8vw4cMlOTlZsrOzZebMmbJ3714REbn//vulR48eMmHCBFd1/y3HceTiiy+Wzz//XHw+nwwYMEB69OghjuPImjVrxOfzySmnnCIxMTGyYcMG+e6770REpHv37nLyySfvV17Xrl0bpF6ApaHbIO0POLRuuukmmTp1qv/34OBgGThwoHTt2lUiIiIkKytLVq5c6Z97lpWV7VfGo48+Krfeeqv/9/DwcBkxYoS0a9dO8vLyZNasWZKbmyvV1dXy5JNPyvbt2+U///lPrU9P7Wv79u0iIhISEiI9evSQrl27Snx8vAQHB0tmZqYsWbJE0tPTxXEcefLJJ6W8vFymTZu2XzmTJk2SnJwc+e677/zvnD755JOle/fu+207aNCg+j9pQCPJz8+X0aNHy/r16/3/17FjRxkyZIiEh4fL2rVrZfHixTJ9+vSA12y/tWDBArn33nulsrJSkpKS5KSTTpLmzZtLZmamrFixota2H3zwgVx00UVSWVkpIiKRkZFywgknSIcOHSQoKEg2bdokCxculKqqKlm0aJEMGTJElixZIq1atdrvuLfeequ88MIL/t/btGkjgwYNkhYtWkhNTY3k5OTIunXrZOPGjWrdly5dKuedd55UVVXtV5/w8HApKCiQLVu2yOrVq6WkpOSAnhccnbgXtT/uRQH/w/z4F8yP4QVPPfWUf6zu0qWLDB48WMLCwmT16tX+b6JIT0+XMWPGyPfffy99+/ats5zMzEwpLy8XEZG2bdtKjx49JDk5WaKioqSoqEjWr18vy5cvF8dx5Mcff5STTjpJVq5cKUlJSWrdpk+fLhdffLFUV1eLyC99zYknnihdu3aVoqIimT9/vuzcuVOuuuqqWn0SDkNNtvR8BNn3HUjbtm0LuL3s806IkJAQp1mzZs706dP3266srMz/83XXXVfrHVZPPvmkU11dXWv7TZs2Occff7x/u7i4OLU+Df2uy5UrV/rzmJgY812fW7ZscR588EHn008/rTN/+eWXaz2GF1980amoqNhvu5kzZzpt2rTxb/uPf/yjzvL2fddlSEiIIyLOeeed52RmZtbarrq6us7j4Oh2oO37QPTt29df9g033OAUFxfXuV1hYaHz/vvvO7fddlud+b7t+dd3dN122237lZeTk+OMHj3av22nTp2cmpqaOss80E8g/tq2evfu7axatWq/bfftz+pTNnAoNEQbpP0BTePZZ5+tNac+//zzne3bt9e57erVq52bbrrJ+eqrr2r9//z582t98umMM85wdu/eXWubsrIy59Zbb611rMcee0yt1+233+68//77zt69e+vMa2pqnE8//dRp0aKFv7y5c+eq5R3onB1oKpdffrn/XA0LC3Nefvnl/bb54Ycf/HPrsLAw//aBPgEcEhLi+Hw+54EHHtjvem3fMW7NmjX+b/Xw+XzOX/7yFycvL2+/srds2eIMGzasVtv/rezsbP/4Ghwc7Lz22mvquL1r1y7nqaeecl566aX9snPOOcd/nPHjxzu5ubl1llFaWur897//da655po6c6Au3IviXhSwL+bHwJFv33YVFhbmREREOP/+97/3227evHm1xqLevXurY8mnn37qPPTQQ85PP/2kHnfr1q3O6aef7i/viiuuULfNzMx0kpKS/Nv269fP2bRpU61tampqnKeeesoJDg6u9eljPgF8+GEBuB4OZtIdFBTkfP/99+b2mzdvrvVR/6efflrdNjc31+nQoYN/28suu6zO7Rp60j116lR/rn31VX0UFBQ48fHx/k5u0aJF5vbr1q1zIiIiHBFxkpKS6rx5v++kW0Sc0047bb8LFkDTWAvAhYWF/nJTU1PVG0r18duvdr3jjjvUbXfv3u1ER0f7t9Xa2IEuQImIk5yc7GRlZQWsLwtQOBw0VBuk/QGHXm5ubq2vmrr22mtdlXPSSSf5yxg6dKj5NY433XRTrZvCBQUFbqvvOI7jLFq0qNbNOQ03uHAk2Lhxo+Pz+fzn6muvvWZuGxUVVWsMC7QALCLOgw8+GLAe+77R6vHHHze3LSoqcnr06KGOyZ999pk/u+iiiwIeW/PrzbHw8HCnsLDQdTlAXbgXxb0o4FfMjwFv2HfcEBHn3XffVbdds2ZNrcXVut6AeSAqKiqc4447zhERJyIiQn3j4m233eY/ZkpKipOdna2W+fjjj9d6PCwAH34O7LuZcMDOO+88Oemkk8xtXnzxRf8f4O7bt69cf/316rYJCQnyj3/8w//722+/7f/Kyca07x8cb9GihetyXnnlFcnPzxcRkeuvv14GDx5sbn/sscfKpEmTROSXr9SZMWNGwGM8+eSTB/y1Y0BD27fNJCUlqV+Vc6BatGghd999t5q3atVKfve73/l/3/ervA7W3XffLc2bN2+w8oDG1BhtkPYHHBovvPCC/ysv27dvL08++eQBl7F+/XqZM2eO//enn35awsLC1O3//ve/+9tYQUGBvP322wd8zH0NHjxYjj32WBER/9eyA0eql19+WRzHEZFfvnLx1+uzunTr1k2mTJlyQOWnpKTIbbfdZm7z448/ysyZM0VEpF+/fgGPER0dLXfddZf/97feeqtW3lDXt7+WExUVJTExMa7LARoa96Jq414UjnTMjwHvGT58uPmnw3r27On/sxAiv4zbByM0NFQuuugiEfnl6+HnzZu33zY1NTXy6quv+n+/9957za+Kvummm6RLly4HVS80LmYmjeyCCy4IuM2vF7IiIpMnTw54k/rcc8+VxMREEREpLy+XhQsXHlwl6yE1NdX/8xtvvOH67xd98cUX/p8vvPDCeu0zevRo/891dUz7Ou644/yTCaApNW/eXCIiIkREZM2aNTJ//vwGKXfcuHH+cjX9+vXz/1yfv4NUXw3190yBQ6Ex2iDtDzg09r3JetVVV0l4ePgBlzFr1iz/z3379q3VNusSHR0tEydOrHN/zaZNm+Ttt9+WBx54QP7yl7/IjTfeKDfccIP/3683xnNycmTHjh0H/BiAw8W+7eGSSy4JuL21QFyX8847T0JCQsxt9r2OnDhxYr3e2GVdR+57ffvRRx9JZmZmfatbZzl5eXny3nvvuSoDaAzci6qNe1E40jE/Brzn0ksvDbjNvvPqJUuWSHFxsbl9fn6+zJgxQx577DH529/+JjfddFOtNvj111/7t125cuV++69fv94/Lw4JCQl4Lyo4OLhWP4HDj32VhYN2/PHHm7njOLUa29ChQwOWGRoaKoMGDfIP/suXL5cxY8YcVD0DGTt2rERHR0txcbEsX75cunfvLldccYX87ne/k379+klwcHC9ytn3AuGFF16Q119/PeA+O3fu9P8caHIQ6PkGDpWwsDA555xz5N1335WqqioZPXq0TJgwwf9O7Pj4eFfl9u7dO+A2+74za993TB+Mjh07+i/2gSNBY7RB2h9waPzwww/+n0eNGuWqjBUrVvh/rs/8WkTkxBNPlKlTp4rIL/NrzX//+1+56667ah0jkOzs7Fo3sYEjheM48uOPP/p/HzJkSMB9unXrJomJiZKbm1uvY9TnGm7f68hZs2bJzz//HHCfXz+1LLL/deQJJ5wgqampsmPHDtm+fbv07NlTLrvsMhk3bpwMHjzY/ETUvs4//3x5+OGHReSXhen33ntPJkyYIKNGjZKWLVvWqwygMXAvqjbuReFIx/wY8J76zKt79+4tMTExUlRUJNXV1bJq1ao699u5c6fcfvvt8p///EfKy8vrdfzs7Oz9/m/fucGxxx4rcXFxAcsJ9K0aaFosADeyQF9Rs3fvXqmsrPT/3r59+3qV26FDB//PdTXWhpaUlCQvvfSSXHrppVJZWSk7duyQe++9V+69916JiYmRwYMHy4gRI2TcuHHSt2/fOssoKiryf12JiMhLL710wPXIy8sz84P5SiDA8sMPP8ibb75pbnPJJZfUGvSeeOIJWbZsmfz0009SUVEhb775prz55psSFBQkPXv2lOHDh8upp54qZ5xxRr3fvdmsWbOA24SGhvp/3rd/ORi0LRyJGroN0v6AxldQUCClpaX+3zt16uSqnKysLP/PDTm/vvfee+W+++474PrsOwcGjiR79+6ViooK/+/t2rWr137t2rWr9wJwfca5Xbt2+X/+8ssv61Xuvn57HRkaGipvvvmmnHnmmVJUVCTZ2dnyyCOPyCOPPCIREREyYMAAOemkk2Ts2LEydOhQ9ZORd955p8yePVsWLVokjuPI9OnTZfr06SIi0rVrVxk+fLicfPLJMm7cOImNjT3gegNucS/qf7gXhSMd82PAm+ozr/b5fNK2bVvZsGGDiNRux79asWKFnHzyyQHHqt+qqw3uW35936DRtm3bAzouDi2+ArqRRUZGmnlRUVGt36Ojo+tV7r7bHaoB84ILLpDFixfLueeeW+sGd1FRkXz33Xdy9913S79+/WTAgAEyd+7c/fZviL8PU1VVZeaBnm/ArfXr18szzzxj/lu/fn2tfZKTk2Xp0qVy5513SqtWrfz/X1NTI6tXr5Zp06bJueeeK61bt5aHH35YqqurA9ajof6W8IGibeFI1NBtkPYHNL7fzmvd/k3NfefYDTW//uabb2rd3BoyZIi88MILsmLFCsnOzpaysjJxHMf/b8SIEf5tf/0bi8CR5rfXq1FRUfXar77tTqR+49zBXkvWNcaPGDFCfvzxR7n00ktr1eHXv4n297//XYYNGybdu3eXjz/+uM5yo6Oj5fvvv5dHHnmk1k1yEZGffvpJXnnlFbnoooskOTlZ/vrXv9a6gQ80Ju5F/Q/3onCkY34MeJObefVv22F5ebmMHz/ev/jbokULufPOO2XWrFmyY8cOKS4ulpqaGn8b3Pfv+9bVBvftJ+pbP7d9Eg4NFoCb2G8bSKDvca9ru4Z4J3F9B92+ffv6/0bSJ598IrfeeqsMGTKk1iR82bJlMmrUKPnggw9q7fvbyUVubm6tSUB9/s2ePfugHytwKMXFxckDDzwg6enpsmjRInnkkUfknHPOkebNm/u3ycvLkzvuuEPGjx9f66vqABw82iBwZPntvPa3N6jra985dkPNrx955BH/z5dffrnMnz9frrrqKunbt68kJSXt900CfKoBXvDb69X6/v3N+ra7+tr3WvKjjz464OtIbXzv1KmTvP7665KVlSUzZsyQO++8U0aNGlVrMWfTpk1y7rnnyuOPP15nGWFhYfKXv/xFtm7dKitXrpSnnnpKLrjgAmnTpo1/m5KSEnnkkUdk1KhRLALjsMC9KO5F4cjB/BjwJjfz6t+2ww8//FC2bdsmIiJt2rSRH3/8UR544AEZOXKktG3bVqKiomp9mCFQG9y3n2iqeT8aFgvATaxZs2a1Jqzbt2+v135paWn+n/e9if2rfcsM9E5FkQN/R2R8fLycddZZ8s9//lMWLFgg2dnZ8uqrr/q/uqC6ulquv/76Whe38fHxtQb+3bt3H9AxgaY0efLkgBeFkydPVvcPDg6WwYMHy1/+8heZPn267NmzR+bOnStnnXWWf5tPPvlEPvzww0PwaICjD20QODLExcXVWnj59WL2QO37VYwNMb+urq6W77//XkREgoKC5KGHHgr4rQD1PS5wOGvWrFmtv4db3/M60N/LPFD7fpNHY1xHRkdHy+mnny4PPPCAzJw5U3JycuSDDz6Q3r17+7e54447JD09XS3D5/NJnz595MYbb5R33nlHdu7cKcuXL5fLLrvMv80PP/wgzzzzTIPXHzhQ3IsCjhzMjwFvqk97cByn1vzzt+3wu+++8/88ZcoUad26tVnezz//bOb7lr9z586A9TuQ7dA0WACuh8b8ykefz1fr75QsWLAg4D5VVVWyZMkS/+/9+/ffb5t9/0B3Tk5OwDJXr14dcBtLXFycTJ48WWbOnOmfWGdnZ8vChQtrbTdo0CD/z/Pnzz+oYwINoam+0jUoKEiGDRsmH3/8sZx66qn+///000+bpD4NqameU+BAeLUN0v7gBYMHD/b/PHPmTFdl9OvXz/9zfebXv93ut/Pr7Oxs/99BbdmypbRs2dIsa926dfX624i0WRzufl3U/NWiRYsC7vPTTz/V6xr0QOzbLxyK68jIyEg577zzZPbs2f7F54qKCvnqq68OqJx+/frJK6+8IldeeaX//470uQYOHe5FBca9KBwtmB8D3lOfefWaNWv8n9oNDg6uNS8XEdm1a5f/533fuKiZM2eOme87N1i/fn29PrW/ePHigNug6bAAXA8RERH+nysrKxu8/NGjR/t/fv311wN+/eTHH3/sn0hHRETIkCFD9ttm378/tHLlSrO8srIy+eyzz+pfYUPnzp2lZ8+e/t/37NlTKz/zzDP9Pz/77LN81SaaXGO370B8Pp+MGzfO//tv28yRqKmfU+BAeK0N0v7gBWeccYb/5xdffFHKy8sPuIx959crVqyQVatWmduXlJTIu+++W+f+Ir+8aeRX9fn61meffbZe9aTN4kgwatQo/8///ve/A27/xhtvNHgd9r2O/Oijjw7ZeJ2YmCgnnnii/3e3x933G0eO9LkGDh3uRdUf96LgdcyPAe850Hn1wIED9/uzBvu2w0Bf2bxs2bJab+SqS48ePfxv5qisrJT333/f3L6mpkbeeecdcxs0LRaA6yEpKcn/s/WVT25dddVV/sa6fPlyeeGFF9Rt8/Pz5a9//av/94kTJ0qzZs32227fd4Z9/vnn5jus7r777oDvwKrPO7REfvn6j4yMDP/vv3331zXXXCPx8fEi8stjve++++pV7q91qK6urvf2QH00VvsuLCz0vxMykH2/Ii/QOyaPBI3dZwL1cbS2QdofvOCqq67y/+2hn3/+WaZMmXLAZXTv3l1OOukk/+833HCDeQPpzjvvlMzMTBH55dNEF154Ya08KSnJP+feu3ev/+vu6jJ//vx63+CizeJIcMUVV/h/XrRokXmzavPmzfLEE080eB0GDRokI0eOFJFfbjJfcskl9R7nKyoqJC8vr9b/HcgnlLV5Qnl5eb3/DqOX5ho4dLgXxb0o4FfMjwHvmT17tvznP/9R8/Xr18vTTz/t/33fb5T5VadOnfw/W98yU1JSIldffXXAOgUFBcmkSZP8v997772Sm5urbv/000/Lpk2bApaLpsMCcD306tXL//MHH3zQ4OV37txZrrnmGv/vN9xwgzzzzDNSU1NTa7vNmzfLaaed5v9bD3FxcXL33XfXWebAgQOlc+fOIiJSVFQkEydO3O+it6SkRG699VZ55JFHav09lLrceuutctJJJ8kbb7wh+fn5dW6Tk5MjV111lX/SHRcXJ0OHDq21TbNmzWrdELjvvvtk0qRJ6nfeO44j8+fPl+uvv17atWtXr3eUAQeisdr3smXLpEOHDnLvvffKunXr6tymurpa3nvvPZk6dar///Z9V+eRat/n9IcffuBvvKBJHK1tkPYHL0hISJB//OMf/t+fe+45mTBhgvq3hdauXSs333yzfP3117X+/6GHHpLg4GAREZk7d66MHz/efxPrVxUVFXLHHXfUmp/ec889/htsvwoKCpKxY8f6f588eXKdX3X1/vvvy9ixY6W6unq/d2fXZd82+8knn9R7QQs4lLp16yaTJ0/2/37llVfK66+/vt92S5culVNPPVWKi4tr/d3ghjJ16lR/2/zmm2/kpJNOkh9++EHdftOmTfLAAw9Ihw4d9vvK16lTp0rfvn3l2WefVf8eaFFRkfzf//2f/5MSwcHBctppp/nzjIwMSU1Nlb/85S+ydOlStR7ffPON3HPPPf7fj/S5Bg4d7kVxLwr4FfNjwHvCwsLk0ksvrfMTtAsXLpTTTz9dysrKRESkZ8+ecskll+y33b7faPf666/LY489tt+bln4dx5cvX16vNvjnP/9ZEhMTReSXv+97+umny+bNm2tt4ziOTJs2TW655ZaAYzmaVkhTV+BIMH78eHn++edFRGTatGmybNky6d+/v0RFRfm3ue666/yTXDceffRRWbp0qSxZskSqqqrkhhtukIcffliGDRsmMTExsmXLFpkzZ46/AYeEhMjLL79c6+t19uXz+eShhx6S888/X0REvv32W+nYsaOcfPLJ0rx5c9m9e7fMmTNH8vPzJSUlRf74xz/K//3f/6n1cxxH5s6dK3PnzpXg4GDp3r27HHvssZKQkCClpaWSnp4u8+fPrzUoP/rooxIZGblfWZMnT5atW7fKAw88ICK/fJXBW2+9JX379pXu3btLTEyMFBUVyc6dO2XlypWyd+9et08rEFBjtu+MjAy577775L777pPk5GTp27evJCcnS0hIiOzZs0eWLVtW6281DB8+XC644IKDf1BNLDk5WYYOHSoLFiyQsrIy6dOnj4wZM0Zat27tf4d5586d5brrrmvimsLrjsY2SPuDV1x//fWyZs0a/ycF3n//ffnwww9l4MCB0q1bN4mIiJCsrCxZsWKFpKWliUjtr6kVERk6dKg8/PDDcuutt4qIyGeffSbt2rWTUaNGSWpqquTl5cmsWbNqfRLw3HPPlT/96U911unOO++Ujz/+WEpLSyUtLU1OOOEEGTJkiHTr1k0qKipk4cKF/pvjV111lWzatMn8JITILwtBkZGRUlpaKitXrpRjjz1WRo4cKfHx8f6/f3baaafVWnQCmsLjjz8uCxculI0bN0p5eblMnjxZ7r//fhkyZIiEh4fL2rVrZfHixeI4jvz+97+XnJycgOf/gerVq5e88847MmHCBCkpKZEffvhBTjjhBOncubP0799fEhMTpaysTDIzM2XVqlUBPzX0448/yvXXXy9//OMfpXPnztKrVy9p3ry5VFZWSkZGhixYsKDWJ3xvv/12SU1NrVVGfn6+PPbYY/LYY49JYmKi9OvXT9q0aSMRERH+emzdutW/fbdu3eTmm29u0OcF3sW9KO5FAftifsz8GN7yz3/+U6ZMmSIXXnih3HPPPTJ48GAJDQ2VNWvW1Pqq5piYGHn99dfrfIPlaaedJieddJLMmTNHHMeRv/zlL/LMM89I//79pVmzZvLTTz/JggULpLq6Wtq0aSM333xzrW/0qEurVq3k+eeflwkTJkhNTY0sXbpUunfvLsOHD5cuXbpIcXGxzJs3z/8NN08++aTceOONIlL7K6lxmHBQLxMnTnRERP03a9Ys/7b7/v+BKCwsdM4//3zzOCLitG7d2vniiy/qVeZ9991nlnXMMcc4a9ascV599VX//02aNGm/cm644YaA9fr1X2xsrPPCCy8ErNt7773npKSk1LvcQYMGOWVlZfuVc8899/i3ueeee+r1vAD7OpD2XV+LFi1yQkJC6n1+n3feeU5BQUGdZU2aNMm/3auvvhrw2IHac323mTVrln+bESNG1O+B//+WLFnixMbGqo/3QMsDDlRDtUHaH9C0nnzySScuLi5gG/b5fM5XX31VZxkvvfRSwDKCg4Odm2++2amqqjLr8/HHHztRUVFmWVdffbVTVlbmjBgxol5ziWeffdbx+XxqecxvcbhIT093BgwYYJ7/Z511llNQUBDw/K9v+6jLypUrneOPP77eY3yHDh2cFStW1Crj0Ucfrff+YWFhzn333bdfPXbu3OmEh4fXu5yRI0c6GRkZB/RYAe5FcS8K+C3mx7Q5HLl+O1bfdddd5rmekpLizJs3zyxz9+7dTv/+/c022KNHD2ft2rX1uh/1q7feesuJiYlRywwPD3deeOEFZ9OmTf7/69OnTwM9U2gofAK4nt566y0588wz5Z133pGVK1dKdna2/yP4DSUmJkbee+89mTJlirz55psye/Zs2bVrl5SWlkrz5s2lV69ecuaZZ8rll19er4/ri/zyN1VOPfVUmTp1qsydO1cyMzMlLi5OunTpIhdccIFcccUVEhMTE/APgE+dOlWuv/56+fbbb2XRokWydu1a2b59uxQWFkpISIgkJSVJz5495bTTTpNLLrmkXn/X6Pzzz5ezzz5b3n33Xfnqq69kyZIlkpWVJUVFRRIdHS1t2rSRY489VoYPHy5jx46Vbt261esxAweqMdr34MGDJTMzU7799luZN2+erFixQrZs2SI5OTlSXV0tcXFx0rlzZznhhBPk4osvlkGDBjXQozk8DBgwQFatWiVTp06VWbNmydatW6WoqIi/nYRD5mhug7Q/eMnNN98sF198sbz22mvy1Vdfybp16/x/D7B58+Zy7LHHyogRI2TChAnStWvXOsu44oor5Oyzz5YXX3xRvvzyS9m0aZPk5uZKbGyspKamyimnnCKXX3659OjRI2B9zj77bFmzZo08/vjj8vXXX8v27dslJCREUlJS5MQTT5TJkyfX+ttq9XHttddK79695fnnn5cffvhB0tPTpaSkRBzHOaBygMaWkpIiixYt8n9qbtWqVbJ3715p1aqV9OnTRyZNmiTjx4/3fzqnsfTp00eWLl0qX3/9tXz88ccyf/582bVrl+Tn50t4eLi0aNFCjjnmGBk8eLCcfvrpMmTIkP3q9Oc//1nGjx8v33zzjSxYsEBWr14taWlpUlBQIEFBQRIfHy/HHnusjB49Wi699FJp3779fvVo06aN5OTkyMyZM2Xu3Lmy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",
      "text/plain": [
       "<Figure size 2400x1200 with 24 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.figure(dpi=300,figsize=(8,4))\n",
    "for i in range(24):\n",
    "    ax=plt.subplot(3, 8, i + 1)    #A\n",
    "    img=train_set[i][0]    #B\n",
    "    img=img/2+0.5    #C\n",
    "    img=img.reshape(28, 28)    #D\n",
    "    plt.imshow(img,\n",
    "               cmap=\"binary\")\n",
    "    plt.axis('off')\n",
    "    plt.title(text_labels[train_set[i][1]],    #E\n",
    "        fontsize=8)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd8c5b19",
   "metadata": {},
   "source": [
    "## 2.2. Create Batches \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "fc2f8827",
   "metadata": {},
   "outputs": [],
   "source": [
    "binary_train_set = [x for x in train_set if x[1] in [0,9]]\n",
    "binary_test_set = [x for x in test_set if x[1] in [0,9]]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25216c46",
   "metadata": {},
   "source": [
    "We only keep samples with labels 0 or 9. Let's check the sample size as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "8a6a600a",
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size=64\n",
    "binary_train_loader=torch.utils.data.DataLoader(\n",
    "    binary_train_set,    #A\n",
    "    batch_size=batch_size,    #B\n",
    "    shuffle=True)    #C\n",
    "binary_test_loader=torch.utils.data.DataLoader(\n",
    "    binary_test_set,    #D\n",
    "    batch_size=batch_size,shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39e27a43",
   "metadata": {},
   "source": [
    "# 3. Binary Classification "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4bd8eed1",
   "metadata": {},
   "source": [
    "## 3.1. Create A Neural Network for Binary Classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "1579eddb",
   "metadata": {},
   "outputs": [],
   "source": [
    "device=\"cuda\" if torch.cuda.is_available() else \"cpu\"    #A\n",
    "\n",
    "binary_model=nn.Sequential(    #B\n",
    "    nn.Linear(28*28,256),    #C\n",
    "    nn.ReLU(),    #D\n",
    "    nn.Linear(256,128),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(128,32),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(32,1),\n",
    "    nn.Dropout(p=0.25),\n",
    "    nn.Sigmoid()).to(device)    #E"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "e43a3126",
   "metadata": {},
   "outputs": [],
   "source": [
    "lr=0.001\n",
    "optimizer=torch.optim.Adam(binary_model.parameters(),lr=lr)\n",
    "loss_fn=nn.BCELoss()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "441286c7",
   "metadata": {},
   "source": [
    "## 3.2. Train the Binary Classifier\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "96e2ab86",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "at epoch 0, loss is 0.19023607671260834\n",
      "at epoch 1, loss is 0.17607159912586212\n",
      "at epoch 2, loss is 0.1800561249256134\n",
      "at epoch 3, loss is 0.17833466827869415\n",
      "at epoch 4, loss is 0.17326126992702484\n",
      "at epoch 5, loss is 0.17811700701713562\n",
      "at epoch 6, loss is 0.1758156716823578\n",
      "at epoch 7, loss is 0.1721867471933365\n",
      "at epoch 8, loss is 0.17535655200481415\n",
      "at epoch 9, loss is 0.17637214064598083\n",
      "at epoch 10, loss is 0.1754254400730133\n",
      "at epoch 11, loss is 0.1727903038263321\n",
      "at epoch 12, loss is 0.17383502423763275\n",
      "at epoch 13, loss is 0.17714780569076538\n",
      "at epoch 14, loss is 0.17659619450569153\n",
      "at epoch 15, loss is 0.17556744813919067\n",
      "at epoch 16, loss is 0.17860150337219238\n",
      "at epoch 17, loss is 0.1733895242214203\n",
      "at epoch 18, loss is 0.17634662985801697\n",
      "at epoch 19, loss is 0.174926295876503\n",
      "at epoch 20, loss is 0.17661960422992706\n",
      "at epoch 21, loss is 0.1788635551929474\n",
      "at epoch 22, loss is 0.17317354679107666\n",
      "at epoch 23, loss is 0.1769949197769165\n",
      "at epoch 24, loss is 0.17693647742271423\n",
      "at epoch 25, loss is 0.1762993037700653\n",
      "at epoch 26, loss is 0.1785576045513153\n",
      "at epoch 27, loss is 0.17699386179447174\n",
      "at epoch 28, loss is 0.17502455413341522\n",
      "at epoch 29, loss is 0.17264987528324127\n",
      "at epoch 30, loss is 0.17450328171253204\n",
      "at epoch 31, loss is 0.17264989018440247\n",
      "at epoch 32, loss is 0.17015941441059113\n",
      "at epoch 33, loss is 0.1723022758960724\n",
      "at epoch 34, loss is 0.17739900946617126\n",
      "at epoch 35, loss is 0.17259180545806885\n",
      "at epoch 36, loss is 0.17189684510231018\n",
      "at epoch 37, loss is 0.17815178632736206\n",
      "at epoch 38, loss is 0.17647229135036469\n",
      "at epoch 39, loss is 0.17832563817501068\n",
      "at epoch 40, loss is 0.17386594414710999\n",
      "at epoch 41, loss is 0.1787889003753662\n",
      "at epoch 42, loss is 0.1779780238866806\n",
      "at epoch 43, loss is 0.1751401126384735\n",
      "at epoch 44, loss is 0.17461887001991272\n",
      "at epoch 45, loss is 0.1751980185508728\n",
      "at epoch 46, loss is 0.1741556078195572\n",
      "at epoch 47, loss is 0.17247596383094788\n",
      "at epoch 48, loss is 0.1751401126384735\n",
      "at epoch 49, loss is 0.17664594948291779\n"
     ]
    }
   ],
   "source": [
    "for i in range(50):    #A\n",
    "    tloss=0\n",
    "    for n,(imgs,labels) in enumerate(binary_train_loader):    #B\n",
    "        imgs=imgs.reshape(-1,28*28)    #C\n",
    "        imgs=imgs.to(device)\n",
    "        labels=torch.FloatTensor(\\\n",
    "          [x if x==0 else 1 for x in labels])    #D\n",
    "        labels=labels.reshape(-1,1).to(device)\n",
    "        preds=binary_model(imgs)    \n",
    "        loss=loss_fn(preds,labels)    #E\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()    #F\n",
    "        optimizer.step()\n",
    "        tloss+=loss\n",
    "    tloss=tloss/n\n",
    "    print(f\"at epoch {i}, loss is {tloss}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b065296",
   "metadata": {},
   "source": [
    "## 3.3. Calculate the Accuracy of the Binary Classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "16d6ea3b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the accuracy of the predictions is 0.87841796875\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "results=[]\n",
    "for imgs,labels in binary_test_loader:    #A\n",
    "    imgs=imgs.reshape(-1,28*28).to(device)\n",
    "    labels=torch.FloatTensor(\\\n",
    "         [x if x==0 else 1 for x in labels])\n",
    "    labels=(labels).reshape(-1,1).to(device)\n",
    "    preds=binary_model(imgs)\n",
    "    pred10=torch.where(preds>0.5,1,0)\n",
    "    correct=(pred10==labels)    #B\n",
    "    results.append(correct.detach().cpu()\\\n",
    "      .numpy().mean())    #C\n",
    "accuracy=np.array(results).mean()    #D\n",
    "print(f\"the accuracy of the predictions is {accuracy}\")     "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec9ead30",
   "metadata": {},
   "source": [
    "# 4. Multi-Category Classification\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6500be3a",
   "metadata": {},
   "source": [
    "## 4.1. Validation Set and Early Stopping\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "29279583",
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.manual_seed(42)\n",
    "train_set,val_set=torch.utils.data.random_split(\\\n",
    "    train_set,[50000,10000])\n",
    "train_loader=torch.utils.data.DataLoader(\n",
    "    train_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)   \n",
    "val_loader=torch.utils.data.DataLoader(\n",
    "    val_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)\n",
    "test_loader=torch.utils.data.DataLoader(\n",
    "    test_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "3f9e870e",
   "metadata": {},
   "outputs": [],
   "source": [
    "class EarlyStop:\n",
    "    def __init__(self, patience=10):\n",
    "        self.patience = patience\n",
    "        self.steps = 0\n",
    "        self.min_loss = float('inf')\n",
    "    def stop(self, val_loss):\n",
    "        if val_loss < self.min_loss:\n",
    "            self.min_loss = val_loss\n",
    "            self.steps = 0\n",
    "        elif val_loss >= self.min_loss:\n",
    "            self.steps += 1\n",
    "        if self.steps >= self.patience:\n",
    "            return True\n",
    "        else:\n",
    "            return False\n",
    "stopper=EarlyStop()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eceaac81",
   "metadata": {},
   "source": [
    "## 4.2. A Multi-Category Classification Model\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "a58ee881",
   "metadata": {},
   "outputs": [],
   "source": [
    "model=nn.Sequential(\n",
    "    nn.Linear(28*28,256),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(256,128),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(128,64),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(64,10)).to(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "eae696fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "lr=0.001\n",
    "optimizer=torch.optim.Adam(model.parameters(),lr=lr)\n",
    "loss_fn=nn.CrossEntropyLoss()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eebd60cb",
   "metadata": {},
   "source": [
    "## 4.3. Train the Multi-Category Classifier\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "cbbcce2a",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_epoch():\n",
    "    tloss=0\n",
    "    for n,(imgs,labels) in enumerate(train_loader):    \n",
    "        imgs=imgs.reshape(-1,28*28).to(device)\n",
    "        labels=labels.reshape(-1,).to(device)\n",
    "        preds=model(imgs)    \n",
    "        loss=loss_fn(preds,labels)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()    \n",
    "        optimizer.step()\n",
    "        tloss+=loss\n",
    "    return tloss/n  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "2c4a7183",
   "metadata": {},
   "outputs": [],
   "source": [
    "def val_epoch():\n",
    "    vloss=0\n",
    "    for n,(imgs,labels) in enumerate(val_loader):    \n",
    "        imgs=imgs.reshape(-1,28*28).to(device)\n",
    "        labels=labels.reshape(-1,).to(device)\n",
    "        preds=model(imgs)    \n",
    "        loss=loss_fn(preds,labels)    \n",
    "        vloss+=loss\n",
    "    return vloss/n "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "0ff2224b-379d-4540-b2f0-d3742082047a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "at epoch 1, tloss is 0.5360725522041321, vloss is 0.408762127161026\n",
      "at epoch 2, tloss is 0.38537082076072693, vloss is 0.3859148919582367\n",
      "at epoch 3, tloss is 0.3463587760925293, vloss is 0.39180421829223633\n",
      "at epoch 4, tloss is 0.32379618287086487, vloss is 0.3534753620624542\n",
      "at epoch 5, tloss is 0.3030484914779663, vloss is 0.3352649211883545\n",
      "at epoch 6, tloss is 0.2844930589199066, vloss is 0.326261967420578\n",
      "at epoch 7, tloss is 0.27191540598869324, vloss is 0.326362282037735\n",
      "at epoch 8, tloss is 0.25683873891830444, vloss is 0.3368600010871887\n",
      "at epoch 9, tloss is 0.2451210916042328, vloss is 0.3192601203918457\n",
      "at epoch 10, tloss is 0.23613014817237854, vloss is 0.32789620757102966\n",
      "at epoch 11, tloss is 0.22251741588115692, vloss is 0.3245527148246765\n",
      "at epoch 12, tloss is 0.2171306014060974, vloss is 0.3454188108444214\n",
      "at epoch 13, tloss is 0.2050548791885376, vloss is 0.3453875184059143\n",
      "at epoch 14, tloss is 0.19553515315055847, vloss is 0.350772887468338\n",
      "at epoch 15, tloss is 0.1903936117887497, vloss is 0.33114728331565857\n",
      "at epoch 16, tloss is 0.18288679420948029, vloss is 0.3504491448402405\n",
      "at epoch 17, tloss is 0.17187635600566864, vloss is 0.34980881214141846\n",
      "at epoch 18, tloss is 0.16419820487499237, vloss is 0.37966248393058777\n",
      "at epoch 19, tloss is 0.16154710948467255, vloss is 0.37737590074539185\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,101):    \n",
    "    tloss=train_epoch()\n",
    "    vloss=val_epoch()\n",
    "    print(f\"at epoch {i}, tloss is {tloss}, vloss is {vloss}\")\n",
    "    if stopper.stop(vloss)==True:             \n",
    "        break  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce701067",
   "metadata": {},
   "source": [
    "## 4.4. Calculate the Accuracy of the Multi-Category Classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "6dd25675",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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eEISExOvaVlJSUny7LPPyoABAyQuLk4CAwOlXr160r17d3nsscdk375919y+r7/+WqZOnSpt27aViIgICQ4OlmbNmsmYMWPknXfekfz8fOO8AwcOFIfDYQ8gICIyZ84c+2/o+u963AL8/fff2z/36NHD7VfE2rVrJ61atRIRkby8PFm5cmWFtq+iub7fRbZt2yb33XeftG3bVkJDQyU6Olp69eolc+fO9ei5Gs2bN7eX6ckoTxUxjLanyrIt//Of/7Tbfdttt3m8zk2bNtnzRUdHS25urnHay5cvy+uvvy4jR46UZs2aSUhIiISHh0ubNm1k6tSpsmbNGrfrK21IcafTKR9++KGMHj1aWrZsKcHBweJwOGT58uUev47roW/fvvbPjBjmuRMnTth/86IHkIuItGjRotR97bp164rNX9p+Yffu3fK73/1OOnXqJNHR0eJwOOTOO+8sdf1btmyR6dOnS8eOHSUqKkqCgoKkcePGcvvtt8urr74qly9fdvsarnW/UNp2brJmzRqZNm2adO7cWSIjI8XPz09CQkKkcePG0q9fP5kxY4Z8/vnnpQ50cbXyOGeYPXu23faiAXWys7Pl7bfflltvvVWaNm0qAQEB4nA4ZNeuXW6Xh+qN/jtFnZb+C1xx+vRpmTNnjvTv39++5g4ICJC6detK165d5Ze//KW8/vrr13TtWNbreE/68rp16+xpBg4caP//l19+KRMnTpQ2bdpIWFiYOBwOmTdvnr0/KRpAQETk3XffLXV/6Lq8irRlyxa7P8fHx8vo0aOvy3prHasK+J//+R/L4XBYIuL234QJE6zLly+ry5s8ebI9/aJFi6y9e/da7du3V5c7a9YsdZlPPfWUPe1TTz1lnO67776z6tSpY087adIkKz8/v9g0x48ft/NmzZq5fX9effXVYsss7Z/D4bCmTp1q5ebmul2eJ5o1a2Yv+/jx49b8+fOtwMBA4/qjoqKszz77zKNlv/32225fj6+vrzVjxgyroKDA7fLOnz9vDRkyxO2206ZNG2vbtm2lLmPAgAEebX8iYk2ePPla3kqvPPTQQ/b6xo8f79E8gwcPvq5trEiu77dlXel/Pj4+xr9Jo0aNrE2bNqnLvHqbdufq/UhpPNkvrF271p5mwIAB6jrLY1s+e/as5evra/ejc+fOuX2tllV8m3vggQeM03388cdWbGys2zaOGDHCSk1NNS5n0aJFxbbXM2fOWDfffHOpy1q2bJlHr+F6WbFihd22kJCQym5OteF67PPk39q1a4vNX9p+oWhbd/03evToYvNlZmZa48ePd7u+uLg468svv1Rfgyf7BVdXb+elyczMtEaNGuXx+/LWW2+p6yyvc4ar92/79u2zOnbsWOrydu7c6fa9qCiu77En51TwDv13cqnT0H/Lhv5bs7z55ptWcHCwR32hb9++pS6jIq7jPenLV5+vp6amWmPGjCl1fS+99FKxdrr75+78v7w88sgj9jr/8pe/XJd11kZV4hlop0+fFsuyxOFwSLt27aRdu3ZSt25d8ff3l0uXLsnOnTvl6NGjIiLy4YcfSnp6unz++efFPsUyOXv2rAwdOlTOnTsnkZGR0q9fP4mNjZWkpCRZs2aNPazr008/LR06dJDx48d7/To+++wzmTBhguTk5IiIyKOPPiovvviiR+00mTFjhrz88sv27/Xq1ZObbrpJYmNjJScnR3bu3Cl79uwRy7Jk4cKFcvbsWfniiy/Ex6f8bi787LPPZMaMGSIi0qhRI7n55pslLCxMDh06JBs3bpTCwkJJSUmRcePGycqVK9W7Xl588UV57LHH7N8DAwNlwIAB0rRpU0lJSZG1a9dKcnKyOJ1OmTdvnpw6dUo++eQT43t4/vx56du3r719iIi0atVKevfuLYGBgbJv3z77bq7Dhw/LoEGD5Kuvvip2B4mIyJgxY6RTp06ydetW2bZtm4iI3HjjjdKrV68S6/yv//qvEv83cOBA+e6770REZMCAASU+eb1W1v9/66239u7dW6b5q5J//etf9p2BrVu3lt69e0tAQID89NNP9qewZ86ckdtvv12+++476datWyW21nvltS3HxcXJ4MGD5f/+7//sO7qK+q9Jfn6+fPzxx/bv99xzT6nTvfTSS/KHP/zB3j4jIiLkpptuksaNG4vT6ZS9e/fK9u3bxbIs+fzzz2XgwIGyceNGCQkJUdefm5sro0aNkh9++EH8/PykT58+0qpVK8nNzZUdO3aUmL68+9u1+umnn+yfmzRpcl3XXZ1FRETII488IiJXvmqekZEhIiKTJk2S8PDwEtM3atTIuKwXXnjB3i+0atVKevXqJSEhIXLixAnx9/e3p8vKypLBgwfL1q1b7f9r2LCh9OvXT8LCwuTIkSOSkJAgTqdTzp07J6NGjZLFixfLuHHjyuU1e+Luu++WFStW2L+3bt1aunfvLtHR0ZKfny8XL16Un376yaO7HSvqnOHSpUty++23y6lTpyQoKEhuvvlmadasmWRmZpb67YDmzZvbdylNnjyZ5xzVAPTf0tF/gSuWL18uDz74oP276zmin5+fpKWlyaFDh2TPnj0e3Ykpcn2v411ZliV33323XW/o2bOndOjQQSzLkj179ojD4ZChQ4dKWFiYHDhwQL799lsRuXLX15AhQ0osr7SvUU6ZMkXeffddERFp1qxZuXyjwfVuvB49eojIlW/wvPHGG7Ju3To5e/ashISESNOmTWXo0KHy0EMPScuWLcu83lqn0kp3Lp5//nlr0aJF1sWLF43TrF+/3mrdurVdVX3//feN07pWhIvumpo5c2aJO9cuXbpU7K6dli1bWoWFhaUu092dJgsWLCj2SdrcuXON7fP0DrS3337bni4iIsJ66623rLy8vBLTrVmzxmrUqJE97XPPPWdcpqdc79YJCAiwfHx8rH/84x+W0+ksNt3evXuLfaIVGxtrJScnl7rMjRs3FnuPhg0bZiUmJhabJicnx3rssceKVe3/8Y9/GNs5bNgwe7rQ0FBr8eLFJabZtm2b1bJlS3u6Jk2aWCkpKaUuz9M7Da/megdbeXzK8OSTT9rLu+mmmzyax7V/hIaGlrkNlcn17x8QEGAFBQVZ//u//1tiuoSEhGLbfufOnUvtI5ZV9e9AK89t+d1337Wn6dGjh9vX6npHVYsWLUrdD65evdq+CzAgIMB69tlnS70beOfOnVaHDh3s5T300EOlrtP100A/Pz/7/Sntb5OTk1Ps9/Lub9fC6XRa8fHx9vofeeSR67r+muJa+6NlFd8v+Pn5WXXq1Cn17kTX7cX1zkpfX19r3rx5JY5jhw4dsnr06FHseGtqU3nfwbJr1y47DwsLU++gOXr0qPW3v/3NWrFiRal5eZ8zuO7fivrouHHjrAsXLhSbzul0lliP69+3ou+I5g6W64/+ewX9t+zovzVHt27d7L/l9OnTjd8Yy8jIsD7++GNr5syZpeYVcR1/rXegFfWZzp07Wz/++GOJaV33U54s293rLI9tPzs72263iFjbtm2zZs6cqX6Dx9/f3/rb3/5W5nXXNlWigOap48ePW0FBQZaIWL169TJOd/UtlY8//rhx2sTERCs0NNSedsuWLaVOp10oz507t9gB3t3t2Z4U0NLT063IyEj7YtXUriL79u2z35u6deu6/ZqrO64HTxGxnn32WeO0586ds+rVq2dP++STT5Y6Xf/+/e1p+vTpo956/tvf/rbYiUR6enqJadasWVOsjZ9//rlxecePHy92S/ycOXNKna6qFNCWL19uLy8gIEAtLlvWlRPIq3eK5fV13spw9Wv58MMPjdPu2bOn2NeL33777VKnq8oFtPLeljMyMqyQkBB7mgMHDqiv1fXrMU888USJ3Ol0Wm3atLGnWbp0qbq8c+fOWQ0aNLAPzqdPny4xjesJR9FJSlZWlrrcIpVZQHvllVfsdfv4+Fh79uy5ruuvKcp6Ae7j42N999136vRHjhwpduL46quvGqdNTk62mjdvbk977733ljpdeV+Au25PZfm6RUWcM7ju30TEuvXWW0sUL0y4AK/Z6L9X0H/Ljv5bM2RkZNh/xyZNmhgLWZ6oiOv4ay2giVy5KcTd9Zenyy5NeRfQjh07Vqz9ruf2derUse68807r/vvvt4YPH17ia7Z//OMfy7z+2qTKDCLgiebNm8ugQYNE5MrtiJ48OLx+/foya9YsY96gQQO544477N9dbxN3x7IsefTRR+Xxxx8XkStfR1yyZIncd999Hi/DZOHChfZIig8//LD07t1bnb59+/YyefJkEblyq/ZXX31V5jYUadGihfzhD38w5rGxscXe47fffrvEVxD3798v69evt39/9dVXJSAgwLjMZ555RurVqyciIunp6fKf//ynxDRvvvmm/fOoUaOK/R2v1rx5c/nzn/9s//7GG2+U+WuSFWnQoEH2VyLy8vLsB8CauL62IkVfr6ju+vXrp96S3bFjR/trJSIib7311vVoVrkq7205LCys2IOY//d//9e4vIyMjGJfP7n77rtLTLNy5Uo5fPiwiIjceeedMmbMGPOLkSv7hKKvjV799VCT5557ToKDg91OV5n27t1r7+9FRKZNmyYdO3asxBbVXuPGjZP+/fur07z11ltSWFgoIiLdunWThx9+2DhtVFRUsdGM//Of/9hfDalIrucx9evX93o51+OcYd68eeX6eAjUXvTf4ui/qO5c+0LdunXL9PgiVxV5He/OrFmz7GvR6qBoH1Lko48+EhGRqVOnys8//yzLli2T+fPnyxdffCEnTpyQYcOG2dO+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effdd40DkTRr1kx+/etfy2uvvSYiV4qNixcvlv79+0tQUJAcPXrUfk+HDh0qsbGxHn19tLyU97bsKioqSoYPHy7Lly8Xp9Mpy5cvtzNTwfFqQ4cOlddff10eeughcTqdsmrVKvnqq6+kQ4cO0qVLF4mIiJCsrCw5d+6c7N69Wy5evOjN21ApfvrpJ7n//vuLvbeWZXncn373u98VGwYc7v3iF7+QN998U0REXnvtNfnhhx/khhtukJCQEHuahx56qMwfCLz44ouyfft22bZtmxQUFMj06dPl2WeftY9jR48elfXr19vFdD8/P3n77beNJ7MOh0Pmzp0rd911l4iIrF69Wlq0aCFDhgyRevXqSWJioqxfv15SU1OlYcOG8sgjj8hf/vIXY/ssy5INGzbIhg0bxNfXV+Lj46V9+/YSFRUl2dnZcubMmRL7+hdffLHUZxZWlXOGinTffffZz/ssUjTimMiV5+q6PjuryIIFC6Rnz54V3bxag/57Bf332tB/a7Zz587JnDlzZM6cORIbGyvdunWT2NhY8fPzk/Pnz8sPP/xQ7Nnn/fr1kwkTJlRii8tHbGys9OnTRzZt2iQ5OTnStWtXuf322yUuLs7+gLpVq1by0EMPXZf29OjRQ/71r3/JI488IiIib731lixZskQGDRok9evXlzNnzsjatWvtR2c5HA559dVXS31+NAysKmDTpk1WvXr1LBEx/rvzzjut1NRUa/Lkyfb/LVq0qNTleTKNq0WLFtnTT548udRpnnrqKXuap556yrisnJwc64477rCnDQsLszZs2FBsmuPHj9t5s2bN3Lbvo48+sho2bKi+P67/evXqZeXk5LhdrqZZs2b28o4fP269/vrrVkBAgHGdkZGR1tKlSz1a9oIFC6yIiAj1Nfj6+lq/+93vrIKCArfLS0xMtAYPHuz2fWndurW1detWt8tbuXKl+lpL20b69+9v54MHD/bofXDn3LlzHv294+LirI8++qhc1llVuL4+y7KsJ5980nI4HMb3oGHDhlZCQoLb5WZnZ1vDhw9X388RI0ZYKSkpHu1HPNkvrF271p5mwIABavvKe1t29cknn5RYTufOna9pGZZlWWvWrLHatGnj8f6oY8eO1pkzZ0osx5P9rkl59zfXv5E3/9auXVvmNtRGEydOvKb39er9gqcyMjKsu+66y6N96ZdffunR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",
      "text/plain": [
       "<Figure size 1500x300 with 5 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the label is 9; the prediction is 9\n",
      "the label is 2; the prediction is 2\n",
      "the label is 1; the prediction is 1\n",
      "the label is 1; the prediction is 1\n",
      "the label is 6; the prediction is 6\n"
     ]
    }
   ],
   "source": [
    "plt.figure(dpi=300,figsize=(5,1))\n",
    "for i in range(5):\n",
    "    ax=plt.subplot(1,5, i + 1)    \n",
    "    img=test_set[i][0]    \n",
    "    label=test_set[i][1]\n",
    "    img=img/2+0.5    \n",
    "    img=img.reshape(28, 28)    \n",
    "    plt.imshow(img, cmap=\"binary\")\n",
    "    plt.axis('off')\n",
    "    plt.title(text_labels[label]+f\"; {label}\", fontsize=8)\n",
    "plt.show()\n",
    "for i in range(5):\n",
    "    img,label = test_set[i]\n",
    "    img=img.reshape(-1,28*28).to(device)\n",
    "    pred=model(img)   \n",
    "    index_pred=torch.argmax(pred,dim=1)\n",
    "    idx=index_pred.item()\n",
    "    print(f\"the label is {label}; the prediction is {idx}\")   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "913c6eca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the accuracy of the predictions is 0.8819665605095541\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "results=[]\n",
    "\n",
    "for imgs,labels in test_loader:\n",
    "    imgs=imgs.reshape(-1,28*28).to(device)\n",
    "    labels=(labels).reshape(-1,).to(device)\n",
    "    preds=model(imgs)\n",
    "    pred10=torch.argmax(preds,dim=1)\n",
    "    correct=(pred10==labels)\n",
    "    results.append(correct.detach().cpu().numpy().mean())\n",
    "    \n",
    "accuracy=np.array(results).mean()\n",
    "\n",
    "print(f\"the accuracy of the predictions is {accuracy}\")     "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "992d6a9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercise 2.1\n",
    "t1=torch.DoubleTensor([5, 8, 10])    \n",
    "t2=torch.tensor([5, 8, 10],\n",
    "             dtype=torch.float64)    # or dtype=torch.double\n",
    "print(t1)\n",
    "print(t2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "2004d295",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercise 2.2\n",
    "tensor1 = torch.zeros(2, 3, 4)\n",
    "print(tensor1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "2d751816",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercise 2.3\n",
    "five_heights = heights_tensor[:5] # or five_heights = heights_tensor[0:5]\n",
    "print(five_heights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "bcac8edd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercise 2.4\n",
    "print(heights_reshaped[0,-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "77eaecbe",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercise 2.5\n",
    "values, indices = torch.min(heights_reshaped, dim=1)\n",
    "print(values)\n",
    "print(indices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "c61106f3-f9a8-478a-b3a9-15b2c4c4a40c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "at epoch 1, tloss is 0.537745475769043, vloss is 0.4121069312095642\n",
      "at epoch 2, tloss is 0.3849371373653412, vloss is 0.3786396384239197\n",
      "at epoch 3, tloss is 0.3448890447616577, vloss is 0.3692716360092163\n",
      "at epoch 4, tloss is 0.32273948192596436, vloss is 0.3684476613998413\n",
      "at epoch 5, tloss is 0.30114835500717163, vloss is 0.3243723511695862\n",
      "at epoch 6, tloss is 0.28264880180358887, vloss is 0.3233191668987274\n",
      "at epoch 7, tloss is 0.27177995443344116, vloss is 0.331387460231781\n",
      "at epoch 8, tloss is 0.2545812427997589, vloss is 0.33359137177467346\n",
      "at epoch 9, tloss is 0.24292424321174622, vloss is 0.31812146306037903\n",
      "at epoch 10, tloss is 0.2335413545370102, vloss is 0.3277256190776825\n",
      "at epoch 11, tloss is 0.22438667714595795, vloss is 0.3134971857070923\n",
      "at epoch 12, tloss is 0.2137620747089386, vloss is 0.347300261259079\n",
      "at epoch 13, tloss is 0.20424434542655945, vloss is 0.3238866925239563\n",
      "at epoch 14, tloss is 0.19422517716884613, vloss is 0.3321683704853058\n",
      "at epoch 15, tloss is 0.18548858165740967, vloss is 0.3418818712234497\n",
      "at epoch 16, tloss is 0.1798728108406067, vloss is 0.35300496220588684\n",
      "at epoch 17, tloss is 0.17101672291755676, vloss is 0.33754751086235046\n",
      "at epoch 18, tloss is 0.1649174988269806, vloss is 0.35213780403137207\n",
      "at epoch 19, tloss is 0.15740284323692322, vloss is 0.3573375344276428\n",
      "at epoch 20, tloss is 0.15358765423297882, vloss is 0.36936154961586\n",
      "at epoch 21, tloss is 0.14333458244800568, vloss is 0.37546873092651367\n",
      "the accuracy of the predictions is 0.8819665605095541\n"
     ]
    }
   ],
   "source": [
    "# A demonstration that nn.CrossEntropyLoss() combines nn.LogSoftmax() and nn.NLLLoss() in one single class\n",
    "# instead of using nn.CrossEntropyLoss() and no SoftMax activation in the book\n",
    "# here we use nn.LogSoftmax() activation and nn.NLLLoss() loss function\n",
    "# results are the same as those in the book\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torchvision\n",
    "import torchvision.transforms as T\n",
    "\n",
    "torch.manual_seed(42)\n",
    "transform=T.Compose([\n",
    "    T.ToTensor(),\n",
    "    T.Normalize([0.5],[0.5])])\n",
    "train_set=torchvision.datasets.FashionMNIST(    #A\n",
    "    root=r\"E:\\temp\",    #B\n",
    "    train=True,    #C\n",
    "    download=True,    #D\n",
    "    transform=transform)    #E\n",
    "test_set=torchvision.datasets.FashionMNIST(\n",
    "    root=r\"E:\\temp\",    #B\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=transform)\n",
    "\n",
    "text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',\n",
    "                'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "train_set,val_set=torch.utils.data.random_split(\\\n",
    "    train_set,[50000,10000])\n",
    "\n",
    "\n",
    "batch_size=64\n",
    "train_loader=torch.utils.data.DataLoader(\n",
    "    train_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)   \n",
    "val_loader=torch.utils.data.DataLoader(\n",
    "    val_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)\n",
    "test_loader=torch.utils.data.DataLoader(\n",
    "    test_set,    \n",
    "    batch_size=batch_size,   \n",
    "    shuffle=True)\n",
    "\n",
    "device=\"cuda\" if torch.cuda.is_available() else \"cpu\"    #A\n",
    "\n",
    "model=nn.Sequential(\n",
    "    nn.Linear(28*28,256),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(256,128),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(128,64),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(64,10),\n",
    "    nn.LogSoftmax(dim=1)).to(device) # note the LogSoftmax activation\n",
    "\n",
    "\n",
    "\n",
    "lr=0.001\n",
    "optimizer=torch.optim.Adam(model.parameters(),lr=lr)\n",
    "\n",
    "# note the negative log likelihood loss NLLLoss()\n",
    "loss_fn=nn.NLLLoss()\n",
    "\n",
    "\n",
    "class EarlyStop:\n",
    "    def __init__(self, patience=10):\n",
    "        self.patience = patience\n",
    "        self.steps = 0\n",
    "        self.min_loss = float('inf')\n",
    "    def stop(self, val_loss):\n",
    "        if val_loss < self.min_loss:\n",
    "            self.min_loss = val_loss\n",
    "            self.steps = 0\n",
    "        elif val_loss > self.min_loss:\n",
    "            self.steps += 1\n",
    "        if self.steps >= self.patience:\n",
    "            return True\n",
    "        else:\n",
    "            return False\n",
    "\n",
    "\n",
    "stopper=EarlyStop()\n",
    "\n",
    "def train_epoch():\n",
    "    tloss=0\n",
    "    for n,(imgs,labels) in enumerate(train_loader):    #B\n",
    "        imgs=imgs.reshape(-1,28*28).to(device)\n",
    "        labels=labels.reshape(-1,).to(device)\n",
    "        preds=model(imgs)    \n",
    "        loss=loss_fn(preds,labels)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()    #F\n",
    "        optimizer.step()\n",
    "        tloss+=loss\n",
    "    return tloss/n    \n",
    "\n",
    "def val_epoch():\n",
    "    vloss=0\n",
    "    for n,(imgs,labels) in enumerate(val_loader):    #B\n",
    "        imgs=imgs.reshape(-1,28*28).to(device)\n",
    "        labels=labels.reshape(-1,).to(device)\n",
    "        preds=model(imgs)    \n",
    "        loss=loss_fn(preds,labels)    #E\n",
    "        vloss+=loss\n",
    "    return vloss/n      \n",
    "\n",
    "for i in range(1,101):    #A\n",
    "    tloss=train_epoch()\n",
    "    vloss=val_epoch()\n",
    "    print(f\"at epoch {i}, tloss is {tloss}, vloss is {vloss}\")\n",
    "    if stopper.stop(vloss)==True:             \n",
    "        break    \n",
    "\n",
    "\n",
    "\n",
    "import numpy as np\n",
    "results=[]\n",
    "\n",
    "for imgs,labels in test_loader:\n",
    "    imgs=imgs.reshape(-1,28*28).to(device)\n",
    "    labels=(labels).reshape(-1,).to(device)\n",
    "    preds=model(imgs)\n",
    "    pred10=torch.argmax(preds,dim=1)\n",
    "    correct=(pred10==labels)\n",
    "    results.append(correct.detach().cpu().numpy().mean())\n",
    "    \n",
    "accuracy=np.array(results).mean()\n",
    "\n",
    "print(f\"the accuracy of the predictions is {accuracy}\")  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "10f4f997-2c1a-41ba-9136-e679e5d6d71e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
